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

时间:2015-01-02 18:58:21

标签: batch-file

@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而言,我相对来说是一个菜鸟,但我确实有其他的编程知识。 但我希望有人能帮忙!

2 个答案:

答案 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
)