首页 > 解决方案 > 如何列出文件夹中的所有文件然后选择多个文件

问题描述

我希望能够:

  1. 将我的 .bat 脚本放在包含文件的某个文件夹中并运行它
  2. 在 CMD 中,脚本应列出该文件夹中的所有文件,并带有可选择的数字
  3. 在用户提示中,用户应该能够选择两个或多个文件进行进一步处理,方法是输入以逗号、空格或其他任何内容分隔的数字

以下是我到目前为止所拥有的。它只能选择一个文件。我不是开发人员,这是复制/粘贴/编辑的,无法弄清楚如何增强它以处理多个文件。最终目标是在 .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

标签: batch-filecmdmultiple-select

解决方案


我通常会建议您使用这种方法来完成这项任务。

@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

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

[编辑 /]

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


推荐阅读