2015-08-31 166 views
0

我遇到了一個用於Windows命令提示符的密碼保護的批處理文件。兩種方式都不能正常工作。如果它不顯示語法錯誤,即使輸入正確的密碼也無法重新執行。這裏是代碼:Windows批量密碼保護?

@echo off 
echo Computer password protected. 
echo. 

:PSW 
set /p "PASS" = "Enter password: " 
IF "%PASS%"=="kerberos" (
    echo Welcome. 
    echo. 
    goto EOF 
) ELSE (
    echo Wrong password! Try again. 
    echo. 
    goto PSW 
) 

:EOF 

我保持密碼,因爲它只是一個測試,看看它是否正常工作,以及它如何實際工作。

回答

1

請勿在您的set命令中放入"或空格。

例如

C:\Users\marc>set /p "pass" = "prompt: " 
prompt: argle 

C:\Users\marc>set /P "pass2"= "prompt: " 
prompt: bargle 

C:\Users\marc>set 
[..snip..] 
pass" =argle 
pass2"=bargle 

注意"和空間如何成爲環境變量的一部分。

而是執行此操作:

C:\Users\marc>set /p pass3="prompt: " 
        ^^^^^^^---note: no quotes, no space 
prompt: kittens 

C:\Users\mbb190>echo %pass3% 
kittens 
+0

您還可以引用分配'設置/ P「PASS3 =提示:」' –

1

set /p語法是錯誤的。您需要使用:

set /p PASS="Enter password: " 
+0

所以相同的腳本不能在MS-DOS工作在虛擬機中運行。看起來我不得不搜索另一種語法來獲取變量中的提示值。 – Polda18

+0

據我記憶,不幸的是'set'不支持純MS-DOS中的'/ P'開關... – aschipfl

+0

我已經檢查過在MS-DOS幫助中。我不知道如何通過MS-DOS中的提示行進行用戶友好的變量填充。也許它不是通過簡單的批處理腳本來設計的。一個簡單的程序實際上可以完成這項工作,但它首先需要用QuickBasic或其他編程語言編寫,然後編譯爲EXE或COM(COM會更好)。此外,它應該處理其他字符,如空格和特殊字符以用於交互操作。然後智能可能會使用DOS安裝軟盤,重啓,退出安裝並刪除批處理行(並可能刪除程序)。 – Polda18