Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
当前回答
可以使用errorlevel检查批处理文件将要运行的系统(当前目录或路径)上是否存在给定的程序。为了让测试的程序正常运行,退出并设置退出码。在这个例子中,我用了-?作为myExe的参数,大多数CLI程序都有类似的参数,如-h,——help, -v等…这确保它只是运行并退出,并将错误级别设置为0
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,但是这样你就可以在测试和条件之间使用命令,并根据需要反复测试条件。
其他回答
搜索路径上的可执行文件(或其他类似路径的字符串,如果需要):
c:\> for %i in (cmd.exe) do @echo. %~$PATH:i
C:\WINDOWS\system32\cmd.exe
c:\> for %i in (python.exe) do @echo. %~$PATH:i
C:\Python25\python.exe
c:\>
列出所有驱动器:
fsutil fsinfo drives
无论如何,这是一个很好的Windows CMD或批处理文件的在线参考。我学到了一些我不知道的东西。
关于使用::而不是REM进行评论:要小心!::是CALL标签的一种特殊情况,作用类似于注释。当在括号内使用时,例如在for或IF循环中,函数将提前退出。调试非常令人沮丧!
详细描述请参见http://www.ss64.com/nt/rem.html。
(添加一个新的答案,而不是上面第一次提到的评论,因为我还不值得评论:0)
要从文件的第一行开始设置一个环境变量,我使用以下命令:
rem a.txt contains one line: abc123
set /p DATA=<a.txt
echo data: %DATA%
这将输出:abc123