Windows CMD,阵列问题[重复]

lztngnrs  于 2023-05-01  发布在  Windows
关注(0)|答案(1)|浏览(137)

此问题已在此处有答案

Variables are not behaving as expected(1个答案)
3天前关闭。
我会继续制作脚本来检查文件夹中的文件数量。为此,我将文件夹存储在一个数组中,如下所示:

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。我希望它显示我的第一个文件夹和0为第二个2。
我也尝试这个:

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%
)
flvlnr44

flvlnr441#

@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值。

相关问题