Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
当前回答
能够运行命令并处理输出(如bash中的'$()'的反引号)。
for /f %i in ('dir /on /b *.jpg') do echo --^> %i
如果文件名中有空格,可以这样写:
for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
其他回答
我总是发现很难阅读每行用关键字标记的注释:
REM blah blah blah
易于阅读:
:: blah blah blah
创建并开始编辑一个新文件
copy con new.txt
This is the contents of my file
^Z
Ctrl+Z发送ASCII EOF字符。这就像bash中的heredocs:
cat <<EOF > new.txt
This is the contents of my file
EOF
使用SET /P从文件中设置环境变量
SET /P SVNVERSION=<ver.tmp
要获取当前日期/时间用于日志文件等,我在批处理文件中使用这个:
for /f "usebackq tokens=1,2,3,4,5,6,7 delims=/:. " %%a in (`echo %DATE% %TIME%`) do set NOW=%%d%%b%%c_%%e%%f%%g
set LOG=output_%NOW%.log
基于行的执行
虽然在大多数情况下没有明显的好处,但当试图在运行时更新内容时,它会有所帮助。例如:
UpdateSource.bat
copy UpdateSource.bat Current.bat
echo "Hi!"
Current.bat
copy UpdateSource.bat Current.bat
现在,执行Current.bat会产生这样的输出。
HI!
注意,批处理执行是按行号进行的。如果基本行没有完全相同的行号,这样的更新可能会导致跳过或向后移动一行。