首页 > 解决方案 > 我如何在按 ENTER 或不按 ENTER 的情况下发出命令 提交输入会导致它重复,直到它批量获得正确的输入?

问题描述

  1. 所以我目前正在创建一个隐藏文件并将其移动到其他地方的程序,并检索您需要输入密码的文件。但是我发现了一个问题,当我只按 ENTER 而不输入密码时,批处理程序就关闭了。我想这样做,当您按 ENTER 或不输入密码时,它会显示“请输入密码!” 直到它得到它想要的。(老实说,这只是我用谷歌搜索并复制粘贴的东西,并稍作更改)

  2. 附加问题,可以使用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将关闭。

所以回到第一个问题,有没有办法防止 cmd 关闭按下回车按钮而不在输入上输入任何密码?

标签: batch-filepasswords

解决方案


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

@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 /?
  • if /?
  • move /?
  • pause /?
  • rem /?
  • set /?
  • setlocal /?
  • title /?

另请参阅:如何阻止 Windows 命令解释器在用户输入不正确时退出批处理文件执行?


推荐阅读