cmd.exe
我在 Windows (至少到 XP)中有一个绝妙的技巧来模拟没有换行符的 UNIX 回显的行为, echo -n
. 例如,命令:
<nul: set /p junk= xyzzy
将导致正好输出六个字符,前导空格和字符串“xyzzy”,仅此而已。
如果您对它的工作原理感兴趣,它实际上是一个输入命令,它作为提示输出,然后在将该输入分配给环境变量
" xyzzy"
之前等待用户输入。junk
在这种特殊情况下,它不会等待用户输入,因为它会从nul
设备中获取输入。
cmd
当(例如)在循环中处理文件时(每个文件一次迭代),您希望每行列出多个文件,它在脚本中非常有用。通过使用这个技巧,您可以简单地输出每个文件名后跟一个空格并且没有换行符,然后在循环之后输出一个换行符以完成:
Processing files:
file1.txt file42.txt p0rn.zip
现在我发现,在 Windows 7 下,空格不再输出,所以我得到的是:
Processing files:
file1.txtfile42.txtp0rn.zip
有没有一种方法可以让set /p
我再次开始尊重我的空间,或者在 Win7 中是否有另一种方法可以达到相同的效果?
我尝试过引用、使用.
(在 中有效echo
)甚至用 转义字符串^
,但它们似乎都不起作用:
C:\Pax> <nul: set /p junk= xyzzy
xyzzy
C:\Pax> <nul: set /p junk=" xyzzy"
xyzzy
C:\Pax> <nul: set /p junk=' xyzzy'
' xyzzy'
C:\Pax> <nul: set /p junk=. xyzzy
. xyzzy
C:\Pax> <nul: set /p junk=^ xyzzy
xyzzy
我需要的是:
C:\Pax> some_magical_command_with_an_argument xyzzy
xyzzy
这将在开始时给我空格,在结尾处没有换行符。