Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?

指南:

每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包

澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。

(请参见:Windows批处理文件:.bat vs .cmd?)


当前回答

相当于bash(和其他shell)

echo -n Hello # or
echo Hello\\c

输出“Hello”,后面没有换行符。一个cmd黑客来做这个:

<nul set /p any-variable-name=Hello

Set /p是一种提示用户输入的方法。它发出给定的字符串,然后等待(在同一行,即没有CRLF),等待用户输入响应。

<nul只是向set /p命令输送一个空响应,因此最终结果是发出的提示字符串。(由于响应为空,所使用的变量保持不变。)

问题是:不可能输出前导等号,在Vista中前导空白字符被删除,但在XP中没有。

其他回答

一行中包含多个命令,在很多情况下都很有用:

&用于组合两个命令,执行command1和command2 &&一个条件组合,如果command1成功完成,则执行command2 仅当command1未成功完成时才执行Command2。

例子:

:: ** Edit the most recent .TXT file and exit, useful in a .CMD / .BAT **
FOR /F %%I IN ('DIR *.TXT /B /O:-N') DO NOTEPAD %%I & EXIT


:: ** If exist any .TXT file, display the list in NOTEPAD, if not it 
:: ** exits without any error (note the && and the 2> error redirection)
DIR *.TXT > TXT.LST 2> NUL && NOTEPAD TXT.LST
PAUSE

停止执行并显示如下提示:

Press any key to continue . . .

如果你想通过在Windows资源管理器中双击一个批处理来运行它,并且想实际看到输出,而不仅仅是命令窗口的一闪而过,这很有用。

设置环境变量时的搜索和替换:

> @set fname=%date:/=%

...从日期中删除“/”以用于带时间戳的文件名。

还有子字符串……

> @set dayofweek=%fname:~0,3%

无论如何,这是一个很好的Windows CMD或批处理文件的在线参考。我学到了一些我不知道的东西。

PUSHD path

将您带到path指定的目录。

POPD

带您回到您“推”的目录。