dev*_*r82 2 windows cmd batch-file
我正在 Windows 中编写一个需要运行 nodejs 应用程序的小批处理文件。在运行应用程序之前,我需要确保用户安装了该节点,如果没有,则向他显示需要该节点的消息。
我所做的是这样的:
@echo OFF
setlocal EnableDelayedExpansion
REM Check if node is installed
for /f "delims=" %%i in ('node -v') do set output=%%i
IF "!output!" EQU "" (
echo node could not be found
) else (
node %~dp0app.js
)
Run Code Online (Sandbox Code Playgroud)
如果用户安装了节点,output则将包含版本号。如果没有安装,那么它将是空的。这个逻辑有效。但是如果没有安装节点(node -v找不到命令),批处理结果还会显示以下输出:
'node' is not recognized as an internal or external command,
operable program or batch file.
node could not be found
Run Code Online (Sandbox Code Playgroud)
我想对用户隐藏“未识别”消息,只显示“找不到节点”。
我怎样才能隐藏它?
您可以使用此错误级别检查专门针对 9009 进行测试,这是未找到程序的返回码。
if "%errorlevel%" == "9009"
对于您的示例,这将起作用:
@echo OFF
REM Check if node is installed
node -v 2> Nul
if "%errorlevel%" == "9009" (
echo node could not be found
) else (
node %~dp0app.js
)
Run Code Online (Sandbox Code Playgroud)
要抑制错误消息,请将其重定向到 NUL:
set "output=not installed"
for /f "delims=" %%i in ('node -v 2^>nul') do set output=%%i
echo %output%
Run Code Online (Sandbox Code Playgroud)
另一种方式(受 Npocmaka 的回答启发):
where node.exe >nul 2>&1 && echo installed || echo not installed
Run Code Online (Sandbox Code Playgroud)
或保持更接近您的原始输出:
where node.exe >nul 2>&1 && node %~dp0app.js || echo node could not be found
Run Code Online (Sandbox Code Playgroud)