如果命令正确,我的批处理脚本不能使用

时间:2017-03-03 03:51:50

标签: batch-file if-statement

我花了几天时间试图让这个批处理脚本工作,但它似乎无法正常工作。在它提示我设置变量并设置它之后,似乎只是做了它想做的事。

例如,当我说它似乎不存在时,我可能会输入n,它会像它应该的那样结束脚本。但是,如果我重新打开它,并且它说出与以前相同的内容,并且我再次输入n,它可能会跳转到:DeleteCalc,就像我键入y一样。

这是我的剧本:

@echo off
:Begin
color fc
title My script
cls
if not exist "C:\calc.exe" (
    echo calc.exe doesn't seem to exist. Attempt deletion anyway? ^(Y/N^)
    set "calcnotexist="
    set /p "calcnotexist="

    ::This command checks to see if the user inputs a quotation mark. If they do, it echos that quotes cannot be inputted.
    setlocal EnableDelayedExpansion
    if not !calcnotexist!==!calcnotexist:^"=! set "calcnotexist="
    endlocal & if "%calcnotexist%"=="" (
        echo ERROR - Quotes cannot be entered.
        pause
        goto Begin
    )

    if /i "%calcnotexist%"=="Y" (
        echo.
        goto DeleteCalc
    )
    if /i "%calcnotexist%"=="Yes" (
        echo.
        goto DeleteCalc
    )
    if /i "%calcnotexist%"=="N" goto End
    if /i "%calcnotexist%"=="No" goto End
    echo ERROR - Unrecognized input
    pause
    goto Begin
)

:calcDoesExist
title My script
cls
echo calc.exe found. Delete? ^(Y/N^)
set "calcexist="
set /p "calcexist="

::This command checks to see if the user inputs a quotation mark. If they do, it echos that quotes cannot be inputted.
setlocal enabledelayedexpansion
if not !calcexist!==!calcexist:^"=! set "calcexist="
endlocal & if "%calcexist%"=="" (
    echo ERROR - Quotes cannot be entered.
    pause
    goto calcDoesExist
)

if /i "%calcexist%"=="Y" goto DeleteCalc
if /i "%calcexist%"=="Yes" goto DeleteCalc
if /i "%calcexist%"=="N" goto End
if /i "%calcexist%"=="No" goto End
echo ERROR - Unrecognized input
pause
goto calcDoesExist

:DeleteCalc
cls
echo Deleting...
if not exist C:\calc.exe goto Success
del /f /q C:\calc.exe >nul 2>nul
if not exist C:\calc.exe goto Success
echo Fail!
echo.
echo calc.exe could not be deleted.
echo.
pause
goto End

:Success
echo Deleted!
echo.
echo calc.exe successfully deleted.
echo.
pause
goto End

:End
exit /b

我可能做错了什么?

由于

P.S。我通过打开CMD并在那里多次运行批处理脚本来测试它。 (但是只要双击它也不会正常工作)

1 个答案:

答案 0 :(得分:2)

如果您重新构建脚本,则不需要扩展If块,因此不需要EnableDelayedExpansion。此外,如果您使用Choice,则无需进行所有回复验证。

示例:

@Echo Off
Title My script
Color FC

:Begin
If Exist "C:\calc.exe" GoTo calcDoesExist
Echo(calc.exe doesn't seem to exist.
Choice /M "Attempt deletion anyway"
If ErrorLevel 3 (ClS & GoTo Begin)
If ErrorLevel 2 GoTo End
If ErrorLevel 1 GoTo Success
GoTo End

:calcDoesExist
Echo(calc.exe found.
Choice /M "Delete"
If ErrorLevel 3 (ClS & GoTo calcDoesExist)
If ErrorLevel 2 GoTo End
If ErrorLevel 1 GoTo DeleteCalc
GoTo End

:DeleteCalc
ClS
Echo(Deleting...
Del /A /F "C:\calc.exe">Nul 2>&1
If Not Exist "C:\calc.exe" GoTo Success
Echo(Fail!
Echo(
Echo(calc.exe could not be deleted.
GoTo End

:Success
Echo(
Echo(Deleted!
Echo(
Echo(calc.exe does not exist.

:End
Echo(
Echo(Exiting...
Timeout 3 /NoBreak>Nul
Exit /B