Windows批处理文件中一些不太为人所知,但重要且有用的特性是什么?
指南:
- 每个答案只涉及一个特性
- 提供特性的简短描述和示例,而不是只提供文档链接
- 答案限于本地功能,即不需要其他软件,如Windows资源工具包
澄清:我们这里指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(另请参见:Windows批处理文件:.bat与.cmd有何区别?)
Windows批处理文件中一些不太为人所知,但重要且有用的特性是什么?
指南:
澄清:我们这里指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(另请参见:Windows批处理文件:.bat与.cmd有何区别?)
myExe -? >nul 2>&1
Set errCode=%errorlevel%
@if %errCode% EQU 0 (
echo myExe -? does not return an error (exists)
) ELSE (
echo myExe -? returns an error (does not exist)
)
是的,您可以直接测试errorlevel而不将其分配给errCode,但这样可以在测试和条件之间放置命令,并根据需要重复测试条件。
'删除目录'的子目录选项:
rd /s /q junk
@echo off
echo Please choose one of the following options
echo 1. Apple
echo 2. Orange
echo 3. Pizza
echo a, b, c. Something else
choice /c:123abc /m "Answer?"
set ChoiceLevel=%ErrorLevel%
echo Choice was: %ChoiceLevel%
%ChoiceLevel%
将是第n个选项被选择(在上面的示例中,b=5
)。for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do (call :set_date %%i %%j %%k %%l)
goto :end_set_date
:set_date
if ("%1:~0,1%" gtr "9") shift
for /f "skip=1 tokens=2-4 delims=(-)" %%m in ('echo,^|date') do (set %%m=%1&set %%n=%2&set %%o=%3)
goto :eof
:end_set_date
echo day in 'DD' format is %dd%; month in 'MM' format is %mm%; year in 'YYYY' format is %yy%
在想要在分支之间复制文件时,有一个小技巧:
C:\src\branch1\mydir\mydir2\mydir3\mydir4>xcopy %cd:branch1=branch2%\foo*
Overwrite C:\src\branch1\mydir\mydir2\mydir3\mydir4\foo.txt (Yes/No/All)? y
C:\src\branch2\mydir\mydir2\mydir3\mydir4\foo.txt
这里同时使用了%cd%环境变量和环境变量替换。
for /l %%i in (startNumber, counter, endNumber) do echo %%i
more details > http://www.ss64.com/nt/for.html
如果要从脚本内部解析 stdin,需要使用FOR和FIND命令的技巧:
for /f "tokens=*" %%g in ('find /V ""') do (
:: do what you want with %%g
echo %%g
)
Forfiles非常有用,例如,可以递归删除所有两天前的文件。
forfiles /D -2 /P "C:\Temp" /S /C "cmd /c del @path"
使用正则表达式支持的Findstr:
findstr "^[0-9].*" c:\windows\system32\drivers\etc\hosts
使用pushd命令到UNC路径会创建一个临时驱动器映射(从Z开始向后查找下一个可用字母),并将您放置在该驱动器和路径中。当您使用popd或退出命令提示符时,临时映射将消失。
C:\>pushd \\yourmom\jukebox
Z:\>pushd \\yourmom\business
Y:\>
C:\utils>prompt $+$m$p$g
C:\utils>pushd m:
+\\yourmom\pub M:\>pushd c:\
++c:\>pushd
M:\
C:\utils
++c:\>popd
+\\yourmom\pub M:\>popd
C:\utils>