我无法运行此批处理脚本,它会在第一个命令后停止运行

时间:2019-04-02 09:13:35

标签: batch-file uninstaller

我正在尝试使用批处理脚本方法制作一个卸载程序。我已经为此编写了程序:

@echo off
set /p res = Are you sure to uninstall my summer car and all of its 
components? (NO = N, YES = Y)
if %res%==Y ( goto un )
else if %res%==y ( goto un )
else if %res%==N ( exit )
else if %res%==n ( exit )
:un
rmdir /s /q mysummercar
pause

但是我的程序实际上并没有运行,它显示“您确定要卸载我的夏季汽车及其组件(否= N,是= Y)”,但是在此消息之后,当我按Y(或y)时小),则批处理文件消失。仅当按下N(或n小)或其他键时,该按钮才应消失,但同时按下Y时,该按钮也将消失。 谁能告诉我解决方案以运行完整的批处理文件,即运行程序的“ un”循环?

2 个答案:

答案 0 :(得分:0)

在学习了如何使用IfSetChoice命令之后,您可以选择将代码简化为更明智的选择:

使用Set /P

@If Not Exist "mysummercar\" Exit /B
@Set /P "res=Uninstall my summer car and all of its components [Y,N]?"
@If /I Not "%res%"=="Y" Exit /B
@RD /S/Q "mysummercar"

或更短的(没有Not

@If Not Exist "mysummercar\" Exit /B
@Set /P "res=Uninstall my summer car and all of its components [Y,N]?"
@If /I "%res%"=="Y" RD /S/Q "mysummercar"


使用Choice

@If Not Exist "mysummercar\" Exit /B
@Choice /M "Uninstall my summer car and all of its components"
@If ErrorLevel 2 Exit /B
@RD /S/Q "mysummercar"

或更短的(带有Not

@If Not Exist "mysummercar\" Exit /B
@Choice /M "Uninstall my summer car and all of its components"
@If Not ErrorLevel 2 RD /S/Q "mysummercar"

答案 1 :(得分:0)

有更好的方法来执行此操作,但要始终专注于当前格式...这里的主要问题是,您在=之前创建了一个带有空格的变量,因此该变量被创建为{{1 }},因此%res %不是%res%

此外,我们使用%res %开关来测试不区分大小写的代码。最后,如果用户键入任何其他值,将会发生什么?然后它将消失并且仍然执行if /i,因此只需运行:un

if /i "%res%"=="y"

一个更简单的解决方案是:

@echo off
set /p "res=Are you sure to uninstall my summer car and all of its components? (NO = N, YES = Y): "
if /i "%res%"=="y" rmdir /s /q mysummercar

我强烈建议您阅读一些帮助文件。打开@echo off choice /C YN /M "Press Y to uninstall my summer car or N to Cancel" if %errorlevel% equ 1 rmdir /s /q mysummercar 并运行以下命令:

  • cmd.exe
  • choice /?
  • set /?