[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 文件大小怎么用批处理修改成可读大小(如KB/MB/GB)

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 设置输出文件名(默认UTF8编码)
  4. set "output=FileList_UTF8.txt"
  5. :: 使用PowerShell获取文件信息
  6. powershell -Command "Get-ChildItem -Recurse -File | ForEach-Object { '{0}|{1} bytes' -f $_.FullName, $_.Length } | Out-File -Encoding UTF8 '%output%'"
  7. echo 文件列表已生成: %output%
  8. pause
复制代码

本帖最后由 aloha20200628 于 2025-4-22 18:21 编辑

回复 1# 李道001

基于一楼代码改写如下,代码第6行中的字段 {1:n2} 控制文件尺寸的小数点位数,预设保留2位》n0=整数,n1=保留小数点1位,...
  1. @echo off
  2. :: 设置输出文件名(默认ansi编码)
  3. set "output=FileList_ansi.txt"
  4. set "tmpF=%temp%\%output%"
  5. :: 使用PowerShell获取文件信息
  6. powershell "dir -R -File | %%{$n,$z=0,$_.length; while($z/1024 -gt 1){$z/=1024;$n++}; $u=('B','KB','MB','GB','TB')[$n]; """{0} ^| {1:n2} $u""" -f $_.FullName,$z} | Out-File -Enc default '%tmpF%' "
  7. move /y "%tmpF%" "%output%">nul 2>nul
  8. echo,文件列表已生成: %output%
  9. pause&exit/b
复制代码

TOP

总是保留2位小数
将第7行tostring('f2')中的2换成其他数字可变更小数位
  1. @echo off
  2. :: 设置输出文件名(默认UTF8编码)
  3. set "output=FileList_UTF8.txt"
  4. :: 使用PowerShell获取文件信息
  5. powershell -Command "$saisu={$i=0;$s=[decimal]$args[0];while($s -ge 1024 -and $i -lt 3){$i++;$s/=1kb};($s.tostring('f2'),('','K','M','G')[$i],'B') -join ''};Get-ChildItem -Recurse -File |where{$_.name -notmatch '%output%'}|foreach{'{0}|{1} bytes ({2})' -f $_.fullname,$_.length,($($saisu.invoke($_.length)))}| Out-File -Encoding UTF8 '%output%'"
  6. echo 文件列表已生成: %output%
  7. pause
复制代码

TOP

回复 2# aloha20200628


    不好意思大佬,我的系统需要输出ANSI格式目录文件,我直接改编码出错,能在帮着改一下吗

TOP

回复 4# 李道001

二楼代码已改为用 ansi 编码输出结果文件...

TOP

回复 5# aloha20200628
输出文件名能不能取磁盘名,那样更方便管理一点。

TOP

回复 6# 李道001

盘符用何格式加入文件名?请举例说明…

TOP

回复 7# aloha20200628


   

TOP

本帖最后由 李道001 于 2025-4-22 22:52 编辑

<img src="https://free4.yunpng.top/2025/04/22/6807acd258b4e.png" alt="捕获.PNG" title="捕获.PNG" />

TOP

本帖最后由 aloha20200628 于 2025-4-22 22:52 编辑

回复 6# 李道001

请将二楼代码第3行改为 set "output=FileList_ansi[%cd:~,1%].txt",即把当前目录包含的盘符提取追加到输出文件名末尾,例如 FileList_ansi[D].txt

TOP

回复 10# aloha20200628


    已完美解决,谢谢老师的耐心指导

TOP

粗略展示,自己看看还是够用的
  1. @echo off
  2. cd /d "%~dp0"
  3. robocopy . "$" /mir /xf "%~f0" /l /nc /ndl /njh /njs /log:out.txt
  4. pause
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表