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

指南:

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

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

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


当前回答

子字符串变量:

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456

其他回答

我总是发现很难阅读每行用关键字标记的注释:

REM blah blah blah

易于阅读:

:: blah blah blah

cmd.exe中的快速编辑模式是我的最爱。这有点偏离主题,但是当与命令shell交互时,它可以是一个救星。不,我并不是在夸张——在你死之前,你只会看到一定次数的* * * * * v;你看得越多,死得越快。

打开regedit(小心,不是我的 故障、蓝屏等) 进入HKCU/控制台 “quickkedit”设置为“1”

(你也可以从UI设置,这可能是更好的方法。有关说明,请参阅注释。还有一个很好的一行脚本也可以做到这一点。)

现在,要复制,只需左键单击并拖动选择,然后右键单击复制。要粘贴,只需右击。

不再有^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v ^ v !!

该死,我想我刚杀了人。对不起!

逃离“管道”:

echo ^| ^< ^> ^& ^\ ^^

没有编辑器,需要创建一个批处理文件?

copy con test.bat

只需输入命令,按enter键输入新行。 按Ctrl-Z和Enter关闭文件。

ENDLOCAL使用的行仍然解析局部变量。这就允许了以下技巧:

ENDLOCAL & SET MYGLOBAL=%SOMELOCAL% & SET MYOTHERGLOBAL=%SOMEOTHERLOCAL%

这是一种将结果传输到调用上下文的有用方法。具体来说,一旦ENDLOCAL完成,% somlocal%就超出了作用域,但那时% somlocal%已经展开,因此MYGLOBAL在调用上下文中使用局部变量赋值。

出于同样的原因,如果你决定这样做:

ENDLOCAL & SET MYLOCAL=%MYLOCAL%

您将发现新的MYLOCAL变量现在实际上是一个常规环境变量,而不是您希望它成为的局部变量。