需要对我正在处理的批处理文件进行一些输入

Need some input on a batch file im working on

@echo off


:options
cls

echo Please select an operation:
echo.
echo 1. Mount TrueCrypt Volume
echo 2. Start TrueCrypt
echo 3. Dismount All TrueCrypt Volumes
echo 4. Exit
set /p option=" Option: "

:files
cls

echo Please choose a file:
echo.
echo 1. Tor
echo 2. Other_files
echo 3. Main Menu
set /p file=" File: "

if %option%==1 (

goto files
)
if %option%==2 (
TrueCrypt\TrueCrypt.exe
echo Operation Complete.
pause
goto options
)
if %option%==3 (
TrueCrypt\TrueCrypt.exe /q /d
echo Operation Complete.
pause
goto options
)
if %option%==4 (
exit
)
else(
echo Invalid Input.
echo Please try again . . .
pause > nul
goto options
)

if %file%==1 (
TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "Tor"
echo Operation Complete.
pause
goto files
)
if %file%==2 (
TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "Other_files"
echo Operation Complete.
pause
goto files
)
if %file%==3(
goto options
)
else(
echo Invalid Input.
echo Please try again . . .
pause > nul
goto files
)

这是我输入的批处理文件,用于调用使用 TrueCrypt 制作的隐藏加密卷。 现在选项 "screen" 工作正常,每个选项都按照预期的方式工作。但是文件 "screen" 没有做任何它应该做的事情,你 select 一个你想打开的文件,它什么都不做,只是放在那里,它没有给出错误或任何东西,所以这就是难倒我了。

在 Batch 方面我相对比较菜鸟,但我确实有其他编程知识。 但我希望有人能够提供帮助!

你这里有一个无限循环:

:files
cls

echo Please choose a file:
echo.
echo 1. Tor
echo 2. Other_files
echo 3. Main Menu
set /p file=" File: "

if %option%==1 (
    goto files
)

因此,如果用户输入选项 1,则 IF 条件会将他们发送到上面的 files 菜单。用户输入,例如文件2,但是%option%仍然是1。IF语句语句然后将它们发送回files...

要解决此问题,您应该设置另一个标签(例如,filesExecute)并让 IF 语句将控件发送到那里:

if %option%==1 (
    goto filesExecute
)

现在在适当的位置定义您的 filesExecute 标签:

...

REM Add new label here.
:filesExecute

if %file%==1 (
TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "Tor"
echo Operation Complete.
pause
goto files
)
if %file%==2 (
...

您在间距方面遇到了一些问题,尤其是 if %file%==3( 行。 3( 之间需要有一个 space。没有那个 space,你会得到 The syntax of the command is incorrect. 批处理语言不适合代码打高尔夫球,间距或不间距很重要。

有一个明显的逻辑问题,你要访问 :files 是否输入了相关的 %option%

还有一些通用的批处理脚本约定,如果您现在掌握它们,它们可能会在长期 运行 中为您提供帮助。每当将变量设置为字符串时,请考虑将 set "var=value" 对放在引号中。此外,在 if 语句中引用比较运算符的每一侧。此类更改不会影响此脚本,但习惯会导致以后的故障排除较少。

无论如何,这是你的脚本,已修复:

@echo off

:options
cls
set option=
echo Please select an operation:
echo.
echo 1. Mount TrueCrypt Volume
echo 2. Start TrueCrypt
echo 3. Dismount All TrueCrypt Volumes
echo 4. Exit
set /p "option=Option: "

if "%option%"=="1" (
    goto files
) else if "%option%"=="2" (
    TrueCrypt\TrueCrypt.exe
    echo Operation Complete.
    pause
    goto options
) else if "%option%"=="3" (
    TrueCrypt\TrueCrypt.exe /q /d
    echo Operation Complete.
    pause
    goto options
) else if "%option%"=="4" (
    exit /b
) else (
    echo Invalid Input.
    echo Please try again . . .
    pause > nul
    goto options
)

:files
cls
set file=
echo Please choose a file:
echo.
echo 1. Tor
echo 2. Other_files
echo 3. Main Menu
set /p "file=File: "

if "%file%"=="1" (
    TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "Tor"
    echo Operation Complete.
    pause
    goto files
) else if "%file%"=="2" (
    TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "Other_files"
    echo Operation Complete.
    pause
    goto files
) else if "%file%"=="3" (
    goto options
) else (
    echo Invalid Input.
    echo Please try again . . .
    pause > nul
    goto files
)