Windows CMD,阵列问题

问题描述 投票:0回答:1

我会继续制作一个脚本来检查文件夹中的文件数量。为此,我将文件夹存储在这样的数组中:

set myArray[0]="C:\testFolder\test1\"
set myArray[1]="C:\testFolder\test1\"

为此,我启动了一个变量来计算文件的数量。

set /a filesCount=0

然后我创建循环来遍历数组

for %%v in (0, 1, 1) do (
   for /r %myArray[%v%]% %%i in (*.*) do (
       set filesCount+=1
   )
   echo %filesCount%
)

在我的第一个文件夹中,我有 1 个文件,但程序系统地为变量 filesCount 返回 0。我希望它显示第一个文件夹为 2,第二个文件夹为 0。

我也试试这个:

for %%v in (0, 1, 1) do (
   for /r !myArray[%v%]! %%i in (*.*) do (
       set filesCount+=1
   )
   echo %filesCount%
)

还有这个:

for %%v in (0, 1, 1) do (
   for /r %myArray[%%v]% %%i in (*.*) do (
       set filesCount+=1
   )
   echo %filesCount%
)
windows batch-file
1个回答
0
投票
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

set "myArray[0]=u:\testFolder\test1"
set "myArray[1]=u:\testFolder\test2"
SET /a total=0

FOR /L %%v IN (0,1,1) DO (
 SET /a count=0
 PUSHD "!myArray[%%v]!"
 FOR /r %%i IN (*.*) DO (
  SET /a count+=1
 )
 popd
 SET /a total+=count
 ECHO !count! files IN !myArray[%%v]! total !total!
)
ECHO total is %total%

GOTO :EOF

请注意,我已经更改了目录名称以适合我的系统。

pushd
更改指定目录;
popd
返回到匹配的
pushd
执行时的当前目录。

请注意,

delayedexpansion
语法 (
!var!
) 用于变量在循环内发生变化的地方,并强制表达式
myArray[%%v]
在使用值之前进行评估。

set /a
总是使用变量的
run-time
值。

© www.soinside.com 2019 - 2024. All rights reserved.