@echo off
setlocal disabledelayedexpansion
set "folder=%~1"
if not defined folder set "folder=%cd%"
for /d %%a in ("%folder%\*") do (
set "size=0"
for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b"
setlocal enabledelayedexpansion
echo(%%~nxa # !size!
endlocal
)
pause
我在网站上看到这个并且它运行得很好,但是我试图将它合并到我自己的代码中,但是每当我修改它时,它都无法正常工作。有人请向我解释,以便我可以自己使用它。
答案 0 :(得分:0)
set "folder=%~1"
if not defined folder set "folder=%cd%"
获取作为参数传递的指定文件夹,或者如果不存在参数,请使用当前文件夹
for /d %%a in ("%folder%\*") do (
指示的每个文件夹
for /f "tokens=3,5" %%b in ('
dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "
') do if "%%~c"=="" set "size=%%~b"
对指定文件夹的所有内容执行递归dir
命令,搜索以两个空格开头的行,即dir
命令的页脚行。有两行,一行有4个令牌,一个有五个令牌。我们只想要第一个,即带有4个令牌的行,该行具有该文件夹下所有文件的大小。
至于每个文件夹(它是一个递归目录)会有一个页脚行,我们只对最后一个感兴趣,所以我们继续在{{1}中存储大小值(行中的第三个标记)变量。这样,最后,变量将包含列表的最终总数。
size
当我们在一个代码块中工作时,要检索变量中的更改值,我们需要延迟扩展以回显setlocal enabledelayedexpansion
echo(%%~nxa # !size!
endlocal
变量,以及正在迭代的文件夹的名称和扩展名。