batch-file - 如何列出文件夹中的所有文件然后选择多个文件
问题描述
我希望能够:
- 将我的 .bat 脚本放在包含文件的某个文件夹中并运行它
- 在 CMD 中,脚本应列出该文件夹中的所有文件,并带有可选择的数字
- 在用户提示中,用户应该能够选择两个或多个文件进行进一步处理,方法是输入以逗号、空格或其他任何内容分隔的数字
以下是我到目前为止所拥有的。它只能选择一个文件。我不是开发人员,这是复制/粘贴/编辑的,无法弄清楚如何增强它以处理多个文件。最终目标是在 .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
对于您正在执行的任务,这显然可以简化,但是,我将假设您为了您的问题而简化了任务。
[编辑 /]
请注意,这确实确保最终用户只能输入有效信息。此外,它根本不使用延迟扩展,因此与您的示例不同,使用!
字符命名的文件不会有问题。
推荐阅读
- javascript - 安装节点模块“npm install”时出现问题
- python - Input0 与模型层不兼容:预期形状=(None, 256, 256, 3),发现形状=(256, 256, 3)
- python - python截图通过电子邮件发送
- python - hdbscan 问题(ValueError:numpy.ndarray 大小已更改,可能表示二进制不兼容。预期 C 标头为 88,从 PyObject 获得 80)
- google-apps-script - Google Apps 脚本 - 数据查找副本并粘贴到列的最后一个空单元格中
- javascript - 在 JavaScript 循环中计算具有连续根的序列
- javascript - TypeScript 自动将类型转换为整数
- flutter - 如何在 Android Studio 中禁用红框?
- python - 从三项式三角形中获取列和行
- r - 在 r 中的 GA 中添加约束