当命令不产生输出时,def main():
number1 = getNumber('number1')
number2 = getNumber('number2')
def getNumber(name):
return input('Enter the value of ' + name))
命令分隔符(doskey
)会生成一个空行。
$T
请注意发出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
此处没有空白,无论如何C:\> set "a="
C:\> set "b="
C:\> doskey test=set "a=foo" ^& set "b=bar" ^& echo ^%a^% ^%b^%
C:\> test
%a% %b%
在启动新命令后无效。
如何删除空白行?
更新的 已删除"创建一个单独的流程"因为它错了。
答案 0 :(得分:2)
$T
和^&
之间的区别在于谁处理不同命令的执行。
当使用$T
时,doskey
知道有多个命令,并且它本身是串行执行当前cmd
实例中的命令,带有空行和提示行作为副作用。
使用^&
时,doskey
(正在检查$
前缀字符的人)只能看到没有任何特殊含义的字符。调用宏时,doskey
只执行一个命令(整行),并且是cmd
解析器,现在可以看到连接的命令并处理串行执行,这次没有额外的行。
指示的“...它创建一个单独的进程而不继承环境变量。”不正确。没有额外的过程。你看到的是通常的变量扩展“问题”。在解析时从行中删除变量读取操作以生成要执行的最终命令。您不能更改行中的变量并在稍后的命令中从同一行检索更改的值,因为在开始执行将更改变量之前,在解析时替换了读取操作。 (阅读here)
所以,现在,我们要解决两个问题而不是一个问题。 ^&
案例中的变量扩展以及$T
案例中的其他行。
如果未启用延迟扩展,我们无法在命令行上下文(仅在批处理文件中)从当前cmd
实例启用它,因此,为了解决问题,我们需要强制执行额外的解析强制检索更改值的行。我们可以在call
echo
命令
doskey test=set "a=foo" ^& set "b=bar" ^& call echo ^%a^% ^%b^%
但解决其他问题更容易。空行和提示行只是一个echo
问题
doskey test=echo off $t set "a=foo" $t set "b=bar" $t echo ^%a^% ^%b^% $t echo on
只需在开头echo off
和最后on
。