如何列出文件夹中的所有文件然后 select 多个文件
How to list all files in folder then select multiple files
我希望能够:
- 将我的 .bat 脚本放在一些包含文件的文件夹中,然后 运行 它
- 在 CMD 中,脚本应该使用 select-able numbers
列出该文件夹中的所有文件
- 在用户提示中,用户应该能够选择两个或更多文件进行进一步处理,方法是输入以逗号、空格或其他任何方式分隔的文件编号
以下是我目前所拥有的。它只能选择一个文件。
我不是开发人员,这是 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
请注意,这不会检查有效数字或任何其他内容。
我希望能够:
- 将我的 .bat 脚本放在一些包含文件的文件夹中,然后 运行 它
- 在 CMD 中,脚本应该使用 select-able numbers 列出该文件夹中的所有文件
- 在用户提示中,用户应该能够选择两个或更多文件进行进一步处理,方法是输入以逗号、空格或其他任何方式分隔的文件编号
以下是我目前所拥有的。它只能选择一个文件。 我不是开发人员,这是 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
请注意,这不会检查有效数字或任何其他内容。