如何将DIR查询的结果用作VAR

时间:2015-09-23 04:08:13

标签: batch-file

我正在处理一个批处理文件,并且使它很容易使用,但我希望它" Fool Proof"或尽可能接近我。 我目前正在做什么显示文件夹列表并要求用户从他们正在使用的列表中键入文件夹的名称。我想要的是,如果他们只能为第一个结果输入1,为第二个结果输入2,依此类推。

有问题的当前行

DIR /b "c:\ProgramData\Nuance\%var1%\Users\" | findstr /v "(DGN_RENAMED)" 
SET/p var2="Please type out the Provider voice file name from the list above."%

将显示文件夹名称,如下所示

卡梅伦

JeffG

DR。 Lemper

斯奈德

然后用户必须输入JeffG,这会留下错误的余地,它不会破坏任何东西,但会浪费几秒钟。

我想要的是显示" c:\ ProgramData \ Nuance \%var1%\ Users \"中列出的文件夹。编号并将它们设置为像下面这样的变量,并且只需要输入与文件夹名称相关联的数字

1.Cameron

2.JeffG

3.Dr.Lemper

4.Snyder

2 个答案:

答案 0 :(得分:0)

@echo off
setlocal enabledelayedexpansion

set index=1
for /f %%i in ('dir /b /ad "c:\ProgramData\Nuance\%var1%\Users\" ^| findstr /v "(DGN_RENAMED)"') do (
    set !index!=%%i
    echo !index!.%%i
    set /a index=!index!+1
)
set /p var2="Please type out the Provider voice file name from the list above: "
echo The answer is %var2%, corresponding folder name is "!%var2%!"

现在输出看起来如下所示,用户只需要输入适当的数字。文件夹名称位于相应的变量中(123等。要访问它们,请使用感叹号!代替%(例如,!1!),否则cmd.exe会尝试将它们解释为参数变量。

1.cameron 2.dr.lemper 3.jeffg 4.snyder Please type out the Provider voice file name from the list above: 2 The answer is 2 which is folder "dr.lemper"

答案 1 :(得分:0)

尝试使用以下代码:

@echo off
setlocal EnableDelayedExpansion
set /a count=0

for /f "tokens=*" %%d in ('dir /b "C:\Users\*"') do (
    set /a count+=1
    @echo !count!. %%d 
)
pause