批处理脚本编程 - 如何允许用户从文件夹中的文件列表中按编号选择文件?

m-y*_*m-y 4 directory for-loop user-input file batch-file

我有一个包含N个文件的文件夹.我正在试图弄清楚如何执行以下操作:

显示包含数字的文件列表以供选择:

01 - FileA.pdf
02 - FileB.pdf
03 - FileC.pdf
...
Run Code Online (Sandbox Code Playgroud)

然后,让用户通过键入相应的数字来选择他想要使用的文件.我不知道从哪里开始这个.

Fra*_*ack 11

以下批处理脚本应该执行您想要的操作,解释如下:

@ECHO OFF
SET index=1

SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
   SET file!index!=%%f
   ECHO !index! - %%f
   SET /A index=!index!+1
)

SETLOCAL DISABLEDELAYEDEXPANSION

SET /P selection="select file by number:"

SET file%selection% >nul 2>&1

IF ERRORLEVEL 1 (
   ECHO invalid number selected   
   EXIT /B 1
)

CALL :RESOLVE %%file%selection%%%

ECHO selected file name: %file_name%

GOTO :EOF

:RESOLVE
SET file_name=%1
GOTO :EOF
Run Code Online (Sandbox Code Playgroud)

首先,此脚本使用类似数组的内容来存储文件名.该数组填充在FOR-loop中.对于在当前目录中找到的每个文件名,循环体执行一次.

该数组实际上由一组变量组成,所有变量都file以一个数字开头并附加一个数字(例如file1,file2.)数字存储在变量中index并在每次循环迭代中递增.在循环体中,该数字和相应的文件名也被打印出

在下一部分中,SET /P命令要求用户输入一个数字,然后将其存储在变量中selection.第二个SET命令和以下命令IF用于检查输入的数字是否通过检查fileX变量给出有效的数组索引.

最后,RESOLVE子程序用于将由file输入的数字+ 形成的变量的内容复制selection到名为的变量中,该变量file_name随后可用于进一步处理.

希望能给出一些提示.