计算目录数量

时间:2017-06-02 18:07:00

标签: batch-file cmd

我试图计算目录中的目录数量。我不确定我的代码有什么问题:

@echo off
setlocal disabledelayedexpansion

set "folder=%~1"
if not defined folder set "folder=%cd%"

SET /a counter=0

for /D %%a in ("%folder%\*") do (
    echo folder %counter%: %%~nxa
    SET /a counter=%counter%+1
)

endlocal

正在打印

folder 0: folder1
folder 0: folder2
...

所以我认为计数器每次循环都会重置为0,但我不确定原因。

2 个答案:

答案 0 :(得分:1)

由于您正在编写在同一代码块(即counter循环)中读取变量for,因此您需要建立delayed expansion;否则你总是在执行块之前得到的值

@echo off
setlocal EnableDelayedExpansion

set "folder=%~1"
if not defined folder set "folder=%cd%"

set /A counter=0

for /D %%a in ("%folder%\*") do (
    echo folder !counter!: %%~nxa
    SET /a counter=!counter!+1
)

endlocal

无论如何,set /A不需要显式变量扩展,您可以简单地编写set /A counter=counter+1,甚至更简单,set /A counter+=1,因此您不需要延迟扩展。但是,为了在循环中回显值!counter!,您仍然需要延迟扩展。

有一种更简单的方法来计算文件夹数量,使用dir /B /A:D将普通文件夹列表piped by |返回到find /C以保证接收到的行数:

dir /B /A:D "%folder%\*" | find /C /V ""

您可以使用for /F loop捕获结果并将其存储在变量中:

for /F %%a in ('
    dir /B /A:D "%folder%\*" ^| find /C /V ""
') do (
    set "counter=%%a"
)

请注意此处所需的转义管道^|

答案 1 :(得分:0)

如果可以使用PowerShell:

PS C:\Users\pwatson> Get-ChildItem -Directory | Measure-Object | Select-Object -Property Count

Count
-----
   44