我不太熟悉 Windows CMD 脚本,我需要编写一个脚本来检查特定文件夹中的文件数量,并将找到的文件名存储在变量(可能是数组)中。这是我所拥有的(%1 是我作为参数获取的文件夹):
ECHO ### Checking the number of files under %1 ###
for %%x in (%1\pdf*.*) do (
set file[!numFiles!]=%%~nxf
set /a numFiles+=1
)
ECHO ### Number of files found: %numFiles%
for /L %%i in (0,1,2,3,4) do (
echo !file[%%i]!
)
答案1
如何计算特定文件夹中的文件数量并将文件名存储在数组中?
您的代码存在许多问题:
这是一个更正后的批处理文件(test.cmd):
@echo off
setlocal enabledelayedexpansion
ECHO ### Checking the number of files under %1 ###
set numFiles=0
for %%x in (%1\pdf*.*) do (
set file[!numFiles!]=%%~nfx
set /a numFiles+=1
)
ECHO ### Number of files found: %numFiles%
set /a index=%numFiles%-1
for /L %%i in (0,1,%index%) do (
echo !file[%%i]!
)
endlocal
使用示例和输出:
> dir *.pdf
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test
21/02/2017 22:53 0 pdf01.pdf
21/02/2017 22:53 0 pdf02.pdf
21/02/2017 22:53 0 pdf03.pdf
3 File(s) 0 bytes
0 Dir(s) 1,701,266,092,032 bytes free
> test .
### Checking the number of files under . ###
### Number of files found: 3
F:\test\pdf01.pdf
F:\test\pdf02.pdf
F:\test\pdf03.pdf
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
- 为了- 有条件地对多个文件执行命令。
- 对于/l- 有条件地对一系列数字执行命令。
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。
答案2
获取文件名列表:
dir /b
获取文件数量:
dir /b /a-d | find /v /c "?"
要将文件列表存储在变量“files”中(逗号分隔的 CSV):
set files=""&for /f "delims=" %i in ('dir /b') do set files=!files!,"%i"
set files=!files:~3!
以上命令适用于当前目录。若要使用不同的目录,请在 dir 命令后加上目录名,例如“..”或“c:\”等。
在 Win10 上测试过