允许使用批处理文件的用户进行多项选择

时间:2014-07-17 17:11:17

标签: windows batch-file insert

我想创建一个Windows批处理脚本,它允许用户一次输入多个选项,然后程序将运行。

参考这个网站(Multiple choices menu on batch file?),我知道它可以用于多种选择。但是,这是在bash脚本中。例如......

@echo off
setlocal enabledelayedexpansion

echo Which would you like to use?

echo 1. Hello.txt
echo 2. Byebye.txt
echo 3. ThisIsText.txt
echo 4. MyBatchScript.txt
echo 5. All

set /p op=Type the numbers of the names you want to use (separated by commas with no spaces. E.g: 1,3,2): 

在此之前,它会提示用户选择一个或多个选项。

for /f "delims=, tokens=1-5" %%i in ("op") do (
set i=%%i
set j=%%j
set k=%%k
set l=%%l
set m=%%m
)

然而,在此之前,我意识到选择将被存储到变量“op”中,然后这将在i中。基本上,不使用jklm。我不确定我是否错误地解释了它。希望我没有错误地解释编码。

所以我想要的是......

当用户只选择1个选项时 它会将“Hello.txt”插入命令(例如)

echo This is complicated > Hello.txt

但是如果用户选择了多个选项(例如,用户键入1,2), 然后它会插入

echo This is complicated > Hello.txt
echo This is complicated > Byebye.txt

如果用户选择选项'5',则不能与其他数字一起输入(因为它是全部)。然后它将回显This is complicated > Byebye.txtHello.txt

无论如何使用批处理脚本来执行此操作吗?

编辑:有人可以向我解释一下吗?我尝试寻找不同的网站,但我仍然没有得到它。对不起,我是编写批处理脚本的新手。所以对它的理解仍然不深。免责声明:这是我从上面提到的网站获得的编码。

if %i%X neq X set last=1b & goto %i%
:1b
if %j%X neq X set last=2b & goto %j%
:2b
if %k%X neq X set last=3b & goto %k%
:3b
if %l%X neq X set last=4b & goto %l%
:4b
if %m%X neq X set last=%m% & goto %m%
goto next

:1
::Put the code for doing the first option here
goto %last%
:2
::Put the code for doing the second option here
goto %last%
:3
::Put the code for doing the third option here
goto %last%
:4
::Put the code for doing the fourth option here
goto %last%
:5
::Put the code for doing the fifth option here
goto %last%

我不明白这有助于运行多个命令。如果我在字段中输入1,2,3,那么它如何让我分开在哪里可以一起运行它?

2 个答案:

答案 0 :(得分:0)

您写道,您尝试了('%op'), ("%op"), (%op)和变体。

应该是:("%op%")

for个变量和命令行参数使用<Percent><char>语法。

op是一个“普通”变量,使用<Percent><name><Percent>%op%

答案 1 :(得分:0)

您可以充分利用flat FOR命令(no / F选项)中项目的标准分隔符是空格,逗号,分号和等号的事实:

@echo off
setlocal enabledelayedexpansion

echo Which would you like to use?

echo 1. Hello.txt
echo 2. Byebye.txt
echo 3. ThisIsText.txt
echo 4. MyBatchScript.txt
echo 5. All

:getOptions
set /p "op=Type the numbers of the names you want to use (separated by commas OR spaces): "
if "%op%" equ "" goto getOptions

if %op% equ 5 set op=1,2,3,4
for %%a in (%op%) do (
   echo Process option %%a
   call :option-%%a
)
goto :EOF

:option-1
echo 1. Hello.txt
exit /B

:option-2
echo 2. Byebye.txt
exit /B

:option-3
echo 3. ThisIsText.txt
exit /B

:option-4
echo 4. MyBatchScript.txt
exit /B