Следующий пакетный скрипт должен делать то, что вы хотите, объяснение приведено ниже:
@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
Прежде всего этот скрипт использует что-то вроде массива для хранения имен файлов. Этот массив заполняется в FOR
-loop. Тело цикла выполняется один раз для каждого имени файла, найденного в текущем каталоге.
Массив фактически состоит из набора переменных, начинающихся с file
и с добавленным числом (например, file1
, file2
. Число сохраняется в переменной index
и увеличивается на каждой итерации цикла . В теле цикла также выводятся номер и имя соответствующего файла
В следующей части команда SET /P
просит пользователя ввести число, которое затем сохраняется в переменной selection
. Вторая команда SET
и последующие IF
используются для проверки того, будет ли введенное число давать действительный индекс массива, путем проверки переменной fileX
.
Наконец, подпрограмма RESOLVE
используется для копирования содержимого переменной, образованной file
+ введенным числом в selection
, в переменную с именем file_name
, которую затем можно использовать для дальнейшей обработки.
Надеюсь, что дает некоторые подсказки.