此代码如何工作? (windows 批次)
How Does This Code Work? (windows batch)
@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
我在网站上读到它,它工作得很好,但我试图将它合并到我自己的代码中,但是每当我修改它时,它就是不起作用。有人请给我解释一下,这样我就可以自己使用了。
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 个标记,一行有 5 个标记。我们只想要第一个,即 4 个标记的行,文件夹下所有文件大小的行。
至于每个文件夹(它是一个递归目录)都会有一个页脚行,我们只对最后一个感兴趣,所以我们将大小值(行中的第三个标记)存储在 size
变量。这样,最后,变量将包含列表的最终总数。
setlocal enabledelayedexpansion
echo(%%~nxa # !size!
endlocal
当我们在代码块中工作时,为了检索变量中的更改值,我们需要延迟扩展以回显 size
变量,以及正在迭代的文件夹的名称和扩展名。
@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
我在网站上读到它,它工作得很好,但我试图将它合并到我自己的代码中,但是每当我修改它时,它就是不起作用。有人请给我解释一下,这样我就可以自己使用了。
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 个标记,一行有 5 个标记。我们只想要第一个,即 4 个标记的行,文件夹下所有文件大小的行。
至于每个文件夹(它是一个递归目录)都会有一个页脚行,我们只对最后一个感兴趣,所以我们将大小值(行中的第三个标记)存储在 size
变量。这样,最后,变量将包含列表的最终总数。
setlocal enabledelayedexpansion
echo(%%~nxa # !size!
endlocal
当我们在代码块中工作时,为了检索变量中的更改值,我们需要延迟扩展以回显 size
变量,以及正在迭代的文件夹的名称和扩展名。