Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
当前回答
就像上面一样,使用CALL, EXIT /B, SETLOCAL和ENDLOCAL,你可以用局部变量和返回值来实现函数。
例子:
@echo off
set x=xxxxx
call :fun 10
echo "%x%"
echo "%y%"
exit /b
:fun
setlocal
set /a y=%1 + 1
endlocal & set x=%y%
exit /b
这将打印:
"11"
""
y变量永远不会离开局部作用域,但由于CMD一次解析一行的方式,您可以将值提取到父作用域的x变量中。
其他回答
具有数值变量的循环的正确格式是
for /l %%i in (startNumber, counter, endNumber) do echo %%i
更多详情> http://www.ss64.com/nt/for.html
PUSHD path
将您带到path指定的目录。
POPD
带您回到您“推”的目录。
无论如何,这是一个很好的Windows CMD或批处理文件的在线参考。我学到了一些我不知道的东西。
子字符串变量:
> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456
dos命令宏。
我已经很久没有参考过这一点了,但我仍然认为这是一个好主意,值得分享。
我们可以将批处理文件和doskey脚本合并到一个文件中。这可能看起来有点过于聪明,但它确实有效。
;= @echo off
;= rem Call DOSKEY and use this file as the macrofile
;= %SystemRoot%\system32\doskey /listsize=1000 /macrofile=%0%
;= rem In batch mode, jump to the end of the file
;= goto end
;= Doskey aliases
h=doskey /history
;= File listing enhancements
ls=dir /x $*
;= Directory navigation
up=cd ..
pd=pushd
;= :end
;= rem ******************************************************************
;= rem * EOF - Don't remove the following line. It clears out the ';'
;= rem * macro. Were using it because there is no support for comments
;= rem * in a DOSKEY macro file.
;= rem ******************************************************************
;=
它通过定义一个假的doskey宏';'来工作,当它被解释为批处理文件时,它会被优雅地(或无声地)忽略。
我缩短了这里列出的版本,如果你想要更多,请点击这里。