@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创建的隐藏和加密卷。 现在,选项“屏幕”工作正常,每个选项都按照预期进行。但是文件“屏幕”并没有做任何想象,你选择了一个你要打开的文件,它没有做什么只是坐在那里,它没有给出错误或任何东西,所以这就是它让我困扰。
对于Batch而言,我相对来说是一个菜鸟,但我确实有其他的编程知识。 但我希望有人能帮忙!
答案 0 :(得分:1)
这里有一个无限循环:
: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 (
...
答案 1 :(得分:1)
您在间距方面遇到了一些问题,尤其是if %file%==3(
行。 3
和(
之间需要有一个空格。如果没有这个空间,您将获得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
)