第一次提示时无法识别用户输入,windows 批次
User input not recognized first time its prompted, windows batch
我目前正在尝试制作一个简单的批处理文件,它将检查我是否安装了 Node.js,如果我安装了它,它会告诉我版本,如果我没有安装,我将被提示通过本地安装文件。这是代码:
@echo off
set "output=0"
for /f "delims=" %%i in ('node -v 2^>nul') do set output=%%i
if %output%==0 (
echo Node not installed.
:start
SET /p choice=Would you like to installed Node? [Y/N]:
IF '%choice%'=='Y' GOTO yes
IF '%choice%'=='y' GOTO yes
IF '%choice%'=='N' GOTO no
IF '%choice%'=='n' GOTO no
ECHO "%choice%" is not valid
ECHO.
GOTO start
:no
ECHO Not installing Node.
PAUSE
EXIT
:yes
ECHO Installing node...
CALL node-v16.15.0-x64.msi
ECHO Installed Node version:
CALL node -v
PAUSE
EXIT
) else (
echo Installed Node version:
call node -v
)
pause
当运行在未安装节点的电脑上安装bat文件时,它会提示用户输入Y或N。无论用户第一次输入什么,输入总是空(如“”),然后它将再次启动 GOTO,这一次用户输入被确认为无论输入是什么,无论用户输入什么选择,都会继续 GOTO。
目前我无法解决可能导致此问题的原因,我以前没有使用过批处理文件。我试图在网上找到答案,但我不知道如何搜索这个问题,因为我不熟悉所谓的或指的是什么东西。感谢任何帮助。
编辑:如果我在代码中隔离用户输入场景,它似乎可以正确确认用户输入。本质上,如果我不检查节点安装而只检查 运行 用户输入,它就可以工作。似乎是节点安装检查影响了用户输入。
您有两个主要问题:
缺少 delayedexpansion
(我最初将其作为重复关闭,但意识到您仍然有问题,没有解释)
您不能 goto
代码块内的标签。但是,如果您稍微更改一下逻辑,则不需要上述任何内容。我们将使用 choice
作为选择菜单的工具。然后,无需使用 for
循环,因为您可以简单地恢复到命令 node -v
:
的 errorlevel
@echo off
node -v && goto :VER || echo Node not installed
choice /c YN /M "Install Node?"
if errorlevel 2 (
echo Not installing Node.
pause
exit /b
)
echo Installing node...
call node-v16.15.0-x64.msi
:VER
echo Installed Node version:
call node -v
pause
我目前正在尝试制作一个简单的批处理文件,它将检查我是否安装了 Node.js,如果我安装了它,它会告诉我版本,如果我没有安装,我将被提示通过本地安装文件。这是代码:
@echo off
set "output=0"
for /f "delims=" %%i in ('node -v 2^>nul') do set output=%%i
if %output%==0 (
echo Node not installed.
:start
SET /p choice=Would you like to installed Node? [Y/N]:
IF '%choice%'=='Y' GOTO yes
IF '%choice%'=='y' GOTO yes
IF '%choice%'=='N' GOTO no
IF '%choice%'=='n' GOTO no
ECHO "%choice%" is not valid
ECHO.
GOTO start
:no
ECHO Not installing Node.
PAUSE
EXIT
:yes
ECHO Installing node...
CALL node-v16.15.0-x64.msi
ECHO Installed Node version:
CALL node -v
PAUSE
EXIT
) else (
echo Installed Node version:
call node -v
)
pause
当运行在未安装节点的电脑上安装bat文件时,它会提示用户输入Y或N。无论用户第一次输入什么,输入总是空(如“”),然后它将再次启动 GOTO,这一次用户输入被确认为无论输入是什么,无论用户输入什么选择,都会继续 GOTO。
目前我无法解决可能导致此问题的原因,我以前没有使用过批处理文件。我试图在网上找到答案,但我不知道如何搜索这个问题,因为我不熟悉所谓的或指的是什么东西。感谢任何帮助。
编辑:如果我在代码中隔离用户输入场景,它似乎可以正确确认用户输入。本质上,如果我不检查节点安装而只检查 运行 用户输入,它就可以工作。似乎是节点安装检查影响了用户输入。
您有两个主要问题:
缺少
delayedexpansion
(我最初将其作为重复关闭,但意识到您仍然有问题,没有解释)您不能
的goto
代码块内的标签。但是,如果您稍微更改一下逻辑,则不需要上述任何内容。我们将使用choice
作为选择菜单的工具。然后,无需使用for
循环,因为您可以简单地恢复到命令node -v
:errorlevel
@echo off
node -v && goto :VER || echo Node not installed
choice /c YN /M "Install Node?"
if errorlevel 2 (
echo Not installing Node.
pause
exit /b
)
echo Installing node...
call node-v16.15.0-x64.msi
:VER
echo Installed Node version:
call node -v
pause