2017-06-02 80 views
0

我在計算目錄中的目錄數。我不知道什麼是錯我的代碼:計算目錄數

@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,但我不確定爲什麼。

+1

你寫了'set \了',而不是'SET/A'。 – Ryan

+0

我修正了這個問題,但得到了同樣的結果。該計數器保持爲0. – greenthumbtack

+3

請使用頂欄上的搜索功能 – Magoo

回答

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到cound收到的行數:

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" 
) 

注意逃脫管這裏需要。

0

如果可以使用PowerShell的:

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

Count 
----- 
    44