首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >doskey命令分隔符生成空行。

doskey命令分隔符生成空行。
EN

Stack Overflow用户
提问于 2016-10-07 22:37:46
回答 1查看 379关注 0票数 1

当命令不产生输出时,doskey命令分隔符($T)生成空行。

代码语言:javascript
复制
C:\> set "a="                                                    

C:\> set "b="                                                    

C:\> doskey test=set "a=foo" $T set "b=bar" $T echo ^%a^% ^%b^%

C:\> test                                                      

C:\>                                                           
C:\> foo bar                                                   

注意发出test后的空行,这会影响可读性。

有一个著名的^?替代$T,它不添加空白,但新命令不继承环境变量。

代码语言:javascript
复制
C:\> set "a="                                                    

C:\> set "b="                                                    

C:\> doskey test=set "a=foo" ^& set "b=bar" ^& echo ^%a^% ^%b^%

C:\> test                                                      
%a% %b%     

这里没有空白,但是在启动新命令后,set是无效的。

如何删除空白行?

更新:删除“创建一个单独的进程”行,因为它是错误的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 09:17:42

$T^&的区别在于谁处理不同命令的执行。

当使用$T时,doskey知道有多个命令,并且是它自己串行地执行当前cmd实例中的命令,附带的副作用是空行和提示符行。

当使用^&时,doskey (正在检查$前缀字符)只看到没有任何特殊意义的字符。当宏被调用时,doskey只执行一个命令(整行),并且是cmd解析器,它现在看到连接的命令并处理串行执行,这一次没有额外的行。

指示的“.它创建一个单独的进程,而不是继承环境变量”。是不对的没有额外的程序。你看到的是通常的变量展开“问题”。变量读取操作将在解析时从行中删除,以生成要执行的最终命令。不能更改行中的变量,也不能在以后的命令中从同一行检索更改的值,因为在执行将更改变量的执行之前,在解析过程中替换了读取操作。(阅读here)

所以,现在,我们有两个问题要解决,而不是一个。^&情况下的变量展开和$T情况下的附加行。

如果未启用延迟扩展,则无法在命令行上下文中(仅在批处理文件中)从当前的cmd实例启用扩展,因此,要解决此问题,需要强制对行进行额外的解析,以强制检索更改的值。我们可以在call命令之前使用echo命令

代码语言:javascript
复制
doskey test=set "a=foo" ^& set "b=bar" ^& call echo ^%a^% ^%b^%

但更容易解决另一个问题。空行和提示行是一个简单的echo问题。

代码语言:javascript
复制
doskey test=echo off $t set "a=foo" $t set "b=bar" $t echo ^%a^% ^%b^% $t echo on

只需在开始时转echo off,在结束时转on

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39926685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档