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

指南:

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

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

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


当前回答

我发现你可以轻松地将命令输出重定向到文件中非常有用:

DIR *.txt > tmp.txt
DIR *.exe >> tmp.txt

单箭头创建或覆盖文件,双箭头追加文件。现在我可以在我的文本编辑器中打开tmp.txt,做各种各样的事情。

其他回答

使用pushd到UNC路径将创建一个临时驱动器映射(从Z开始,向后查找下一个可用的字母),并将您放入该驱动器和路径中。弹出或退出命令提示符时,临时映射将消失。

   C:\>pushd \\yourmom\jukebox

   Z:\>pushd \\yourmom\business

   Y:\>

此外,与其说这是一个批处理技巧,不如说这是一个命令行环境技巧,但是当您在命令行上使用pushd和popd和网络共享时,使用$+(显示pushd堆栈深度)和$M(显示网络共享路径)修改提示符是有用的。

   C:\utils>prompt $+$m$p$g

   C:\utils>pushd m:

   +\\yourmom\pub M:\>pushd c:\

   ++c:\>pushd
   M:\
   C:\utils  

   ++c:\>popd

   +\\yourmom\pub M:\>popd

   C:\utils>

犯错就放弃。

IF "%errorlevel%" NEQ "0" (
   echo "ERROR:  Something broke.  Bailing out."
   exit /B 1
)

关于使用::而不是REM进行评论:要小心!::是CALL标签的一种特殊情况,作用类似于注释。当在括号内使用时,例如在for或IF循环中,函数将提前退出。调试非常令人沮丧!

详细描述请参见http://www.ss64.com/nt/rem.html。

(添加一个新的答案,而不是上面第一次提到的评论,因为我还不值得评论:0)

调用集——将环境变量展开几个层次。

在http://ss64.com/nt/call.html#advanced从另一个SO问题的答案中发现这个批处理文件变量在for循环中初始化

set VarName=Param
set Param=This

call set Answer=%%%Varname%%%
Echo %Answer%

给了

set VarName=Param
set Param=This
call set Answer=%Param%
Echo This
This

列出所有驱动器:

fsutil fsinfo drives