2015-11-17 79 views
0

我的批處理文件跳過了特定的循環,只是做了某些循環(它只做前三個循環而忽略了其餘循環)。我的批處理文件跳過特定的循環

我試着重寫批處理文件,將新代碼合併到我寫的舊的現有批處理文件中,但我無法使其工作。

echo 1. Login 
echo 2. Exit 
echo. 
set /P M = Command : 
IF M == 1 GOTO 1 

:1 

cls 
echo Login 
echo. 
Set Pass1 = MCTh3sn3r 
Set /P Pass = Enter Password : 
IF Pass == %Pass1% GOTO 2 

:2 

cls 
echo. 
echo Login Successful GOTO 4 

:3 

cls 
echo. 
echo Incorrect Password 

:4 

echo. 
echo 1. Shutdown (S) 
echo 2. Reboot (R) 
echo 3. Logoff (L) 
echo 4. Task Manager (TM) 
echo 5. Command Prompt (CP) 
echo 6. File Locker (FL) 
echo. Set /P Choice = Command : 
IF Choice == "S" GOTO 5 
IF Choice == "R" GOTO 6 
IF Choice == "L" GOTO 7 
IF Choice == "TM" GOTO 8 
IF Choice == "CP" GOTO 9 
IF Choice == "FL" GOTO 10 

:5 

cls 
echo. 
echo System will now shutdown     
Timeout /t 5 
Shutdown /s 
GOTO End 

:6 

cls 
echo. 
echo System will now reboot 
timeout /t 5 
Shutdown /r 
GOTO End 

:7 

cls 
echo. 
echo System will now logoff 
timeout /t 5 
Logoff 
GOTO End 

:8 

gpupdate /force 
gpupdate /force 
gpupdate /force 
gpupdate /force 
start taskmgr 
GOTO End 

:9 

gpupdate /force 
gpupdate /force 
gpupdate /force 
gpupdate /force 
start cmd 
GOTO End 

:10 
( 

if EXIST "PrivateFolder" goto 
11   
if NOT EXIST Locker goto 12 

:13 

echo Are you sure you want to   
lock the folder (Y/N) ? 
set /p Choice = Command : 
IF Choice == "Y" goto 14 
IF Choice == "y" goto 14 
IF Choice == "N" goto 15 
IF Choice == "n" goto 15 
echo Invalid Choice goto 13 

:16 

ren Locker "PrivateFolder" 
attrib +h + s "PrivateFolder" 
echo Folder Locked GOTO End 

:11 

echo Enter password to unlock 
file : 
set /p Pass = Password : 
IF NOT %Pass% == MCTh3sn3r goto 
17 
attrib -h -s "PrivateFolder" 
ren "PrivateFolder" Locker 
echo File locked successfully. 
GOTO End 

:17 

echo Invalid password. 
GOTO End 

:12 

md Locker 
echo Locker created 
successfully. 
GOTO End 

) 

:End 
Exit 
+3

你可以發佈你的代碼(理想情況下,一個最小的可運行示例演示該問題)? – olambert

+0

我發佈了代碼,以便您可以查看。提前致謝。 – TH3SN3R

+1

檢查你的換行。其中一些似乎是隨機的。 – Stephan

回答

0

那麼讓我們開始在TOP。

這組代碼有三個錯誤的東西。

  1. 不要在變量名和變量賦值之間留出空格。
  2. 當您需要使用變量時,您需要用百分號將其包圍。
  3. 你GOTO命令將GOTO標籤1無論變量M等於1。

的。

echo 1. Login 
echo 2. Exit 
echo. 
set /P M = Command : 
IF M == 1 GOTO 1 

:1 

此代碼應該看起來像這樣。

echo 1. Login 
echo 2. Exit 
echo. 
set /P M=Command : 
IF "%M%"=="1" (
    GOTO 1 
) else (
    GOTO END 
) 

:1 

您在下一組代碼中犯同樣的錯誤。不知道爲什麼你選擇使用一個變量的百分比符號而不是另一個。同樣,你需要關閉空格,爲所有變量使用百分比符號,而你的GOTO將轉到標籤2,無論你需要其他代碼來分支。

cls 
echo Login 
echo. 
Set Pass1 = MCTh3sn3r 
Set /P Pass = Enter Password : 
IF Pass == %Pass1% GOTO 2 

:2 

所以再次,使用我最好的編碼實踐,我會這樣編碼。

:1 


cls 
echo Login 
echo. 
Set Pass1=MCTh3sn3r 
Set /P Pass=Enter Password : 
IF "%Pass%"=="%Pass1%" (
    GOTO 2 
) else (
    Echo Wrong Password 
    Pause 
    GOTO 1 
) 

只是要繼續重複自己。同樣的問題。關閉空格並在變量中使用百分號。可能希望在這一項中對他們的選擇進行不區分大小寫的檢查。不知道你以爲他們的答案會在這裏匹配。您的報價圍繞比較的一側,而不是另一側。現在甚至不需要更正此代碼,您應該瞭解您做錯了什麼。

echo. Set /P Choice = Command : 
IF Choice == "S" GOTO 5 
IF Choice == "R" GOTO 6 
IF Choice == "L" GOTO 7 
IF Choice == "TM" GOTO 8 
IF Choice == "CP" GOTO 9 
IF Choice == "FL" GOTO 10 

不知道爲什麼你在這裏使用括號。

:10 
( 

而這裏。

) 

:End 
Exit 

這一個是死的明顯。你不能在另一行上標註你的標籤。

if EXIST "PrivateFolder" goto 
11 

又來了。關閉空間。在比較的兩邊加上引號。使用百分號來引用變量。並閱讀幫助IF命令。使用/ I選項!

:13 

echo Are you sure you want to   
lock the folder (Y/N) ? 
set /p Choice = Command : 
IF Choice == "Y" goto 14 
IF Choice == "y" goto 14 
IF Choice == "N" goto 15 
IF Choice == "n" goto 15 
echo Invalid Choice goto 13 

雖然我們在這裏我想提醒的是,如果你去那邊,並一遍又一遍,你清楚了變量你問的問題之前,使用相同的變量保持。在上面做這個改變。

set "Choice=" 
set /p Choice=Command : 

這裏有一些問題。文件這個詞:是在自己的路線上。數字17是在自己的線上。您終於意識到,您需要爲您的變量使用百分號,但變量%Pass%與變量%Pass%不同。關閉空格並使用引號。

echo Enter password to unlock 
file : 
set /p Pass = Password : 
IF NOT %Pass% == MCTh3sn3r goto 
17 
+0

我給了他對單獨行上的行標籤的懷疑的好處,並假設他正在用單詞換行進行編碼,並且被包裝的行中添加了換行符。我以前見過它。 – SomethingDark

+0

感謝您的努力。我會嘗試你建議的代碼,並希望讓我的程序終於工作。我原本是從一個較小的程序開始的,而且實際上工作。登錄菜單和菜單列表中的前三個選項實際上是來自之前程序的剩餘部分,我在本文中使用了該程序。 – TH3SN3R

+0

@ TH3SN3R不知道你是如何得到這些代碼的,因爲它現在不會工作。 – Squashman