Batch file 如果按ENTER键或不提交输入会导致输入重复,直到批量获得正确的输入,如何生成命令?

Batch file 如果按ENTER键或不提交输入会导致输入重复,直到批量获得正确的输入,如何生成命令?,batch-file,passwords,Batch File,Passwords,因此,我目前正在创建一个程序,隐藏一个文件,并将其移动到其他地方,并检索文件,您需要输入密码。但我发现了一个问题,当我只按ENTER键而不输入密码时,批处理程序关闭了。我想这样做,当你按下回车键或不输入密码时,它会说“请输入密码!”直到它得到它想要的。(说实话,这只是我在谷歌上搜索并复制粘贴的东西,然后稍加修改) 另外一个问题,使用set/p“something=>”代替set/p something= 下面是我使用的命令和代码 我知道这是共谋,可能是最糟糕的事情写 @ECHO OFF titl

因此,我目前正在创建一个程序,隐藏一个文件,并将其移动到其他地方,并检索文件,您需要输入密码。但我发现了一个问题,当我只按ENTER键而不输入密码时,批处理程序关闭了。我想这样做,当你按下回车键或不输入密码时,它会说“请输入密码!”直到它得到它想要的。(说实话,这只是我在谷歌上搜索并复制粘贴的东西,然后稍加修改)

  • 另外一个问题,使用
    set/p“something=>”
    代替
    set/p something=

  • 下面是我使用的命令和代码

    我知道这是共谋,可能是最糟糕的事情写

    @ECHO OFF
    title unlock the stuff
    if EXIST SecretCodes goto CONFIRM
    if NOT EXIST SecretCodes goto CONFIRMATION
    
    :CONFIRM
    echo are you sure you want to Lock the stuff?(Y/N)
    set /p "cho=>"
    if %cho%==Y goto LOCK
    if %cho%==y goto LOCK
    if %cho%==n goto END
    if %cho%==N goto END
    echo excuse me?
    goto CONFIRM
    
    :LOCK
    move /-Y C:\Users\MyName\Desktop\SecretCodes C:\Users\MyName\AppData\Roaming\Hidden
    attrib +H +S C:\Users\MyName\AppData\Roaming\Hidden\SecretCodes
    echo Secret is locked!! o7
    pause
    goto END
    
    :UNLOCK
    title Unlock
    echo Please enter the password!
    set /p "pass=>" 
    if NOT %pass%== passwordispassword goto FAIL
    move /-Y C:\Users\MyName\AppData\Roaming\Hidden\SecretCodes C:\Users\MyName\Desktop
    echo the secret has been revealed!
    pause
    goto END
    
    :FAIL
    title Unlock
    set /p "pass=>"
    if NOT %pass%== passwordispassword goto END 
    move /-Y C:\Users\MyName\AppData\Roaming\Hidden\SecretCodes C:\Users\MyName\Desktop
    echo the secret has been revealed!
    goto END
    
    :CONFIRMATION
    echo are you sure you want to Unlock the secrets?(Y/N)
    set /p "choo=>"
    if %choo%==Y goto UNHIDE
    if %choo%==y goto UNHIDE
    if %choo%==n goto END
    if %choo%==N goto END
    echo excuse me?
    goto CONFIRMATION
    
    :UNHIDE
    attrib -H -S C:\Users\MyName\AppData\Roaming\Hidden\SecretCodes
    goto UNLOCK
    
    为了让事情更清楚,在我写的代码中:

    :CONFIRM 
    echo are you sure you want to Lock the stuff?(Y/N) 
    set /p "cho=>" 
    if %cho%==Y go to LOCK 
    if %cho%==y goto LOCK 
    if %cho%==n goto END 
    if %cho%==N goto END 
    echo excuse me? 
    goto CONFIRM 
    
    ,如果输入错误,将使我重复该命令,例如键入E,然后输入。它会说“对不起?”然后再次问“你确定要锁定该东西吗?(Y/N)”,我遇到的问题是当我什么都不放时(立即按Enter…)。当我什么也没放进去的时候,cmd就会关闭


    那么回到问题1,有没有办法防止cmd closing按下enter按钮而不在输入上输入任何密码?

    这个优化的批处理文件代码应该按照您的预期工作

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    if not exist "%USERPROFILE%\Desktop\SecretCodes" goto PromptUnlock
    
    :PromptLock
    title Lock the stuff
    %SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure you want to LOCK the stuff? (Y/N)"
    if errorlevel 2 goto EndBatch
    
    move /-Y "%USERPROFILE%\Desktop\SecretCodes" "%APPDATA%\Hidden"
    %SystemRoot%\System32\attrib.exe +H +S "%APPDATA%\Hidden\SecretCodes"
    echo/
    echo Secret is locked!! o7
    echo/
    pause
    goto EndBatch
    
    :PromptUnlock
    title Unlock the stuff
    %SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure you want to UNLOCK the stuff? (Y/N)"
    if errorlevel 2 goto EndBatch
    
    %SystemRoot%\System32\attrib.exe -H -S "%APPDATA%\Hidden\SecretCodes"
    
    :PromptPassword
    set "pass="
    set /P "pass=Please enter the password: "
    rem Has the user entered a string at all?
    if not defined pass goto PromptPassword
    rem Remove all double quotes from entered password string for a safe
    rem string comparison below. Password cannot contain character " at all.
    set "pass=%pass:"=%"
    if not "%pass%" == "passwordispassword" goto PromptPassword
    
    move /-Y "%APPDATA%\Hidden\SecretCodes" "%USERPROFILE%\Desktop"
    echo/
    echo The secret has been revealed!
    echo/
    pause
    
    :EndBatch
    endlocal
    
    要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

    • choice/?
    • echo/?
    • endlocal/?
    • goto/?
    • 如果/?
    • 移动/?
    • 暂停/?
    • rem/?
    • 设置/?
    • setlocal/?
    • title/?
    另见: