Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
当前回答
关于使用::而不是REM进行评论:要小心!::是CALL标签的一种特殊情况,作用类似于注释。当在括号内使用时,例如在for或IF循环中,函数将提前退出。调试非常令人沮丧!
详细描述请参见http://www.ss64.com/nt/rem.html。
(添加一个新的答案,而不是上面第一次提到的评论,因为我还不值得评论:0)
其他回答
IF命令!没有它,我的批处理文件是垃圾!
@echo off
IF exist %windir%\system32\iexplore.exe goto end
echo Hmm... it seems you do not have Internet Explorer.
echo Great! You seem to understand ;)
:end
echo Hmm... You have Internet Explorer.
echo That is bad :)
没有编辑器,需要创建一个批处理文件?
copy con test.bat
只需输入命令,按enter键输入新行。 按Ctrl-Z和Enter关闭文件。
softwarejedi已经提到了for命令,但我将再次提到它,因为它非常强大。
下面以YYYYMMDD格式输出当前日期,我在生成备份目录时使用此格式。
for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a
调用集——将环境变量展开几个层次。
在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
现在很多人使用GOTO:EOF来终止他们的批处理文件,但你也可以使用EXIT /B来达到这个目的。
使用EXIT /B的优点是你可以在EXIT /B之后添加一个错误级别,它将退出该错误级别。