Windows批处理文件中一些不太为人所知,但重要且有用的特性是什么?
指南:
- 每个答案只涉及一个特性
- 提供特性的简短描述和示例,而不是只提供文档链接
- 答案限于本地功能,即不需要其他软件,如Windows资源工具包
澄清:我们这里指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(另请参见:Windows批处理文件:.bat与.cmd有何区别?)
Windows批处理文件中一些不太为人所知,但重要且有用的特性是什么?
指南:
澄清:我们这里指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(另请参见:Windows批处理文件:.bat与.cmd有何区别?)
等待N秒钟的巧妙技巧(不是cmd.exe的一部分,但它不需要额外的软件,因为它随Windows一起提供),请参见ping命令。由于第一个ping没有延迟,所以您需要N+1个ping。
echo %time%
call :waitfor 5
echo %time%
goto :eof
:waitfor
setlocal
set /a "t = %1 + 1"
>nul ping 127.0.0.1 -n %t%
endlocal
goto :eof
避免“管道”问题:
echo ^| ^< ^> ^& ^\ ^^
HEAD^
)进行差异比较是有问题的原因。 - Daniel Trebbien能够运行命令并处理输出(如bash中的反引号'$()' )。
for /f %i in ('dir /on /b *.jpg') do echo --^> %i
如果文件名中有空格,请使用以下命令: </p>
for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
- doekman创建一个空文件:
> copy nul filename.ext
type nul > 文件名.扩展名
来实现这个目的。 - Benoitren > blah.txt
。 - Synetech为隐藏命令的所有输出,请重定向到>nul 2>&1。
例如,有些命令行程序即使你将输出重定向到>nul,也会显示输出。但是,如果你像下面这行代码一样重定向输出,所有输出都将被抑制。
PSKILL NOTEPAD >nul 2>&1
编辑:请参见忽略命令的输出以了解其工作原理。
taskkill
。 - idbriiPSKILL NOTEPAD 2>nul
。所以,2>&1 的意思是将 2>(重定向错误)&1(到标准输入作为输入--这就是 & 的作用)。我经常忘记字符的顺序,所以这个解释应该有助于记住它们为什么按照那个顺序。 - idbriibash(及其他shell)的等价命令
echo -n Hello # or
echo Hello\\c
以下是可实现此功能的cmd命令行代码,它将输出不带换行符的"Hello
":
<nul set /p any-variable-name=Hello
set /p
是一种提示用户输入的方式。它输出给定的字符串,然后等待用户响应(在同一行上,即没有CRLF)。
<nul
只需将空响应传输到 set /p
命令,因此净结果是发出的提示字符串。(由于空响应,使用的变量保持不变。)
问题是:无法输出前导等号;在Vista上会删除前导空格字符,但在XP上不会。
PAUSE
停止执行并显示以下提示:
按任意键继续. . .
如果您想通过在Windows资源管理器中双击批处理文件来运行它,并且希望实际上看到输出而不仅仅是命令窗口的闪烁,则此方法很有用。
设置环境变量时进行搜索和替换:
> @set fname=%date:/=%
该功能用于将日期中的“/”移除,以便在时间戳文件名中使用。
还可用于子字符串...
> @set dayofweek=%fname:~0,3%
整数算术:
> SET /A result=10/3 + 1
4
命令分隔符:
cls & dir
copy a b && echo Success
copy a b || echo Failure
第二行中,&& 后面的命令只有在第一个命令成功运行后才会执行。
第三行中,|| 后面的命令只有在第一个命令运行失败后才会执行。