如何列出文件夹中的所有文件然后 select 多个文件

How to list all files in folder then select multiple files

我希望能够:

  1. 将我的 .bat 脚本放在一些包含文件的文件夹中,然后 运行 它
  2. 在 CMD 中,脚本应该使用 select-able numbers
  3. 列出该文件夹中的所有文件
  4. 在用户提示中,用户应该能够选择两个或更多文件进行进一步处理,方法是输入以逗号、空格或其他任何方式分隔的文件编号

以下是我目前所拥有的。它只能选择一个文件。 我不是开发人员,这是 copy/pasted/edited,无法弄清楚如何增强它以处理多个文件。 最终目标是在 .txt 文件中包含所选文件的名称,每行一个名称

非常感谢。

echo off
:START
cls
cls
setlocal enabledelayedexpansion
set count=0
:
:: Read in files
for %%x in (*.*) do (
  set /a count=count+1
  set choice[!count!]=%%x
)

:
echo.
echo Please choose file by number:
echo.

:
:: Print list of files
for /l %%x in (1,1,!count!) do (
   echo %%x] !choice[%%x]!
)
echo.

:
:: Retrieve User input
set /p select=?: 
echo.

echo !choice[%select%]! > my-choice.txt

echo  TYPE ANY KEY TO GO BACK IN START MENU ...
pause  >NUL
goto START

我通常会建议您为任务采用这种方法,您已经布置好了。

@Echo Off
SetLocal EnableExtensions

:Menu
ClS
For /F "Delims==" %%G In ('(Set File[^) 2^> NUL') Do Set "%%G="
For /F "Tokens=1,* Delims=[]" %%G In ('(Set PATHEXT^=^) ^& %__AppDir__%where.exe ".":"*" 2^> NUL ^| %__AppDir__%find.exe /N /V ""') Do Set "File[%%G]=%%~nxH" & Echo %%G. %%~nxH
If Not Defined File[1] GoTo :EOF

:Select
Set "#="
Set /P "#=Choose a file from the list by entering its item number. "
For /F "Tokens=1,* Delims==" %%G In ('(Set File[%#%]^) 2^> NUL ^| %__AppDir__%find.exe "="') Do Set "File[#]=%%H"
If Not Defined File[#] GoTo Select

:Main
(Echo %File[#]%) 1> "my-choice.txt"
Echo Press any key to go back to the menu. . .
Pause 1> NUL
GoTo :Menu

对于您正在执行的任务,这显然可以简化,但是,我假设您已经为了问题的目的简化了任务。

[编辑/]

请注意,这确实确保最终用户只能输入有效信息。此外,它根本不使用延迟扩展,因此与您的示例不同,使用 ! 字符命名的文件不会有问题。

你快搞定了:)

echo off
:START
cls
setlocal enabledelayedexpansion
set count=0
:: Read in files
for %%x in (*.*) do (
  set /a count=count+1
  set choice[!count!]=%%x
)
echo.
echo Please choose files by number:
echo.
:: Print list of files
for /l %%x in (1,1,!count!) do (
   echo %%x] !choice[%%x]!
)
echo.
:: Retrieve User input
set /P selected="select file numbers: "
for %%i in (%selected%) do (
    echo !choice[%%i]! >> my-choice.txt
)    
echo.
echo  TYPE ANY KEY TO GO BACK IN START MENU ...
pause  >NUL
goto START

请注意,这不会检查有效数字或任何其他内容。