我的批处理文件跳过特定的循环

时间:2015-11-17 18:54:41

标签: file batch-file

我的批处理文件跳过特定的循环并且只执行某些循环(它只执行前三个循环并忽略其余循环)。

我尝试重写批处理文件,将新代码合并到我编写的旧的现有批处理文件中,但我无法使其正常工作。

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

1 个答案:

答案 0 :(得分:0)

好吧,让我们从TOP开始。

这组代码有三个错误。

  1. 不要在变量名和变量赋值之间留一个空格。
  2. 当您需要使用变量时,需要用百分号包围它。
  3. 无论变量M等于1,您的GOTO命令都将为GOTO标签1.
  4. 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命令的HELP。使用/ 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 : 
    

    这里有几个问题。 word文件:是独立的。 17号是独立的。您最终意识到您需要为变量使用百分比符号,但变量%Pass%与变量%Pass%不同。关闭空格并使用引号。

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