use*_*097 62 windows script batch command-line
我正在编写一个 bat 脚本,在其中调用一个程序(例如 javac)。为简单起见,我想在运行之前检查该命令是否存在。即如果命令存在于 PATH 中。
例如,
if (my_command.exe is a recognized command) then (
my_command.exe my_args
) else (
REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file."
REM Do not run my_command.exe
)
Run Code Online (Sandbox Code Playgroud)
在 Windows 中执行此操作的最佳方法是什么?
Jos*_*elo 72
WHERE mycommand
IF %ERRORLEVEL% NEQ 0 ECHO mycommand wasn't found
Run Code Online (Sandbox Code Playgroud)
ngr*_*een 19
下面的代码应该始终干净地执行,没有垃圾输出。
javac -version >nul 2>&1 && (
echo found javac
) || (
echo fail
)
Run Code Online (Sandbox Code Playgroud)
输出:
found javac
Run Code Online (Sandbox Code Playgroud)
与单行代码相同的代码:
javaz -version >nul 2>&1 && ( echo found javac ) || ( echo fail )
Run Code Online (Sandbox Code Playgroud)
输出:
fail
Run Code Online (Sandbox Code Playgroud)
需要注意的是秩序&&和||似乎无关紧要。此外,您正在测试其存在的命令需要返回错误级别 <= 0 才能正常工作。希望命令有 /? 或 --help 参数,或与 java 一样,版本信息命令。
最简单的方法是简单地运行命令,但这当然还有其他问题,因为您可能不想启动随机进程。
for %%x in (my_command.exe) do if not [%%~$PATH:x]==[] set MyCommandFound=1
Run Code Online (Sandbox Code Playgroud)
是在%PATH%环境变量列出的路径中搜索程序的替代方法。它本质上是which(1). 它可以做得更好,但基本上就是这样。
对以下版本的一些改进。测试该命令是否存在并抑制不需要的输出。
WHERE scp >nul 2>nul
IF %ERRORLEVEL% EQU 0 ECHO scp found
Run Code Online (Sandbox Code Playgroud)
如果需要安装额外的工具也可以,where资源包中有一个命令;看到Windows相当于whereis吗?。
否则,对于不太古老的 Windows 版本,它可以在 pure 中执行cmd,如Dos 可执行文件查找(除了 PATH )中所述。
| 归档时间: |
|
| 查看次数: |
35212 次 |
| 最近记录: |