我在 CMD 中使用此命令来获取目录中的所有文件大小。
forfiles /s /c "cmd /c echo @file @fsize" >filelist.txt
有办法采用这种尺寸,但采用十六进制格式?
例子:
"00000000.png" 219457
到
"00000000.png" 50A6E
虽然这不使用FORFILES
,但它可以用于windows
cmd
batch-file
. 由于这是一个递归搜索,我假设您希望包含完全限定的路径以避免在多个目录中使用相同的文件名时出现问题。
powershell -NoLogo -NoProfile -Command ^
"$q='\"';Get-ChildItem -File -Recurse ^| ForEach-Object {$($q+$_.FullName+$q) + ' ' + $($_.Length.ToString('X'))}"
嗯,forfiles
肯定不支持十进制转十六进制数。
在纯传统批处理脚本中转换数字不受本机支持,因此您将不得不借用另一种语言(如 PowerShell、VBScript、JavaScript,所有这些都是现代 Windows 系统提供的),或者自己编写代码(一步一步地,就像你会在纸上做一样)。
无论如何,幸运的是,有一个隐藏且未记录的动态伪变量=ExitCode
,它保存了最近退出代码的十六进制值,我们可以使用它:
rem // Iterate through all files in the current working directory:
for /R %%I in (*.*) do (
rem // Store name of currently iterated item:
set "ITEM=%%~I"
rem // Toggle delayed expansion to avoid issues with `!` and `^`:
setlocal EnableDelayedExpansion
rem // Explicitly set exit code to the size of the current file:
cmd /C exit 0%%~zI
rem // Return the exit code, hence the file size, as hex number:
echo(!ITEM! !=ExitCode!
endlocal
)
请注意,文件的大小必须小于 2 GiB,因为退出代码以带符号的 32 位整数形式给出。