我目前正在制作受密碼保護的批處理檔案,問題是當我鍵入@echo on或%@echo on%顯示密碼時,(一會兒,但如果你做視頻,你可以清楚地看到它)。
當我將第 3 行更改為 thisif "%pwd%"==somepassword時,再次鍵入會@echo on顯示密碼。
我有一些想法。例如。使@echo off不可更改或字符轉義,但我不擅長批處理腳本,所以我不能用代碼撰寫它。
有沒有人可以幫我解決這個問題?
@echo off
set /p pwd="Enter password: "
if %pwd%==somepassword (cmd /k) else (exit)
uj5u.com熱心網友回復:
可以使用:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "pwd="
:PwdPrompt
set /P "pwd=Enter password: " || goto PwdPrompt
setlocal EnableDelayedExpansion
if not "!pwd!" == "somepassword" exit /B
endlocal
echo The password is correct!
echo/
pause
endlocal
首先完全定義了所需的執行環境
- 關閉命令回顯模式和
- 啟用命令擴展和
- 禁用延遲變數擴展。
環境變數pwd接下來是明確未定義的。用戶必須輸入密碼。
系統會提示用戶輸入密碼,只要用戶根本不輸入字串,就會回圈執行此操作。所以批處理檔案不接受任何輸入。
然后在進行字串比較之前啟用延遲變數擴展,并利用延遲變數擴展來防止修改批處理檔案代碼以供用戶輸入的字串執行。
如果兩個比較的字串不相等,則退出批處理檔案處理(不一定是命令列程),這會導致在真正退出批處理檔案處理之前對兩者隱式執行endlocal兩次。cmd.exesetlocal
否則,在輸入密碼字串等于批處理檔案中的密碼字串時,在批處理檔案處理繼續執行下一個命令之前,恢復先前禁用延遲擴展的本地環境。
要了解使用的命令及其作業原理,請打開命令提示符視窗,在其中執行以下命令,并仔細閱讀每個命令顯示的所有幫助頁面。
echo /?endlocal /?goto /?if /?pause /?set /?setlocal /?
我強烈建議您也閱讀:
- 如何阻止 Windows 命令解釋器在不正確的用戶輸入上退出批處理檔案執行?
它詳細解釋了為什么此代碼是故障安全和安全的。 - 使用 Windows 批處理檔案的單行多命令
它詳細解釋了命令運算子的含義||。 - Windows 批處理檔案中與 NEQ、LSS、GTR 等等效的符號
它詳細解釋了如何使用命令IF完成字串比較。 - 如何通過參考另一個批處理檔案將環境變數作為引數傳遞?
它詳細解釋了命令SETLOCAL和ENDLOCAL。 - DosTips 論壇主題:ECHO。無法提供文本或空行 - 而是使用 ECHO/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/482006.html
