Board logo

标题: [文本处理] [已解决]求BAT能给当前所有文件夹的文件名前添加文件夹大小 [打印本页]

作者: 8532200    时间: 2021-5-20 21:09     标题: [已解决]求BAT能给当前所有文件夹的文件名前添加文件夹大小

比如我的G盘根目录有4个文件夹

分别在G盘

G:\11
G:\22
G:\33
G:\44


其中11文件夹大小是500G

22文件夹大小是500M

33文件夹是500K

求在它们的文件夹名字前加上文件夹大小

变成G:\500G11或者G:\500GB11

等类似结果。。。


空白文件夹最好可以是0B或者能够写在文件夹名字前就可以了。。拜托了
作者: xp3000    时间: 2021-5-20 21:51

本帖最后由 xp3000 于 2021-5-20 22:33 编辑

文件夹以前可能存放过文件,造成以下情况
可能存在默认生成文件:desktop.ini
可能存在图片缩略图缓存文件:Thumbs.db
两个都是隐藏的
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir/s/b/ad^|sort /r') do (
  3.     attrib -a -s -r -h "%%i\desktop.ini">nul 2>nul&del /f /s /q "%%i\desktop.ini">nul 2>nul
  4.     attrib -a -s -r -h "%%i\Thumbs.db">nul 2>nul & del /f /s /q "%%i\Thumbs.db">nul 2>nul
  5.     rd "%%i"
  6. )
  7. pause
复制代码

作者: newswan    时间: 2021-5-20 22:20

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f "delims=" %%a in ('dir /ad /b /s G:\22ywc\manh22') do (
  4.     set n=0  
  5.     for /f "delims=" %%a in ('dir /b /a-d "%%~fa"') do (
  6.         set n=1
  7.     )
  8.     if !n!==0 echo rd /s /q "%%~fa"
  9. )"
复制代码
先测试,如果正确  删除 echo rd 中的 echo
作者: 8532200    时间: 2021-5-20 22:42

回复 3# newswan


    感谢你的回复。。实测没有效果。。试了好几种方法都不行
作者: 8532200    时间: 2021-5-20 22:44

回复 2# xp3000


    感谢回复,,实测没有效果




提示信息

目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
目录不是空的。
请按任意键继续. . .
作者: 8532200    时间: 2021-5-20 22:48

回复 2# xp3000


    用途是去除空白文件夹。。。但我发现那个不够保险。。。所以求得是在文件夹面前添加文件夹的大小
作者: newswan    时间: 2021-5-20 22:50

你要删除的目录里,是不是有隐藏文件,或者没有权限,先找到问题
作者: xp3000    时间: 2021-5-20 22:54

也就是说,文件夹看着是空的,显示目录不是空的,目录里面有隐藏的文件,至少你得在文件夹把,查看→文件夹选项,里面勾选显示隐藏文件夹选项,看看文件夹里面有什么隐藏的
作者: 8532200    时间: 2021-5-20 22:59

回复 7# newswan


    并不是这样。。。实测还是没办法的。。。。。打开属性看,,,就是0字节。。。目录里面还有空白目录。。。所以不能检测。。。。所以目前求得是给文件夹添加文件夹大小。。这样我可以手动删除
作者: 8532200    时间: 2021-5-20 23:00

回复 8# xp3000


    并不是这样。。。实测还是没办法的。。。。。打开属性看,,,就是0字节。。。目录里面还有空白目录。。。所以不能检测。。。。所以目前求得是给文件夹添加文件夹大小。。这样我可以手动删除

截了图的,,,发现上传不了。。。总之。。。。目前主要用途虽然是删除空白文件夹。。。但是只能求其他bat来实现稳妥的删除
作者: went    时间: 2021-5-20 23:03

写过类似的工具,由于隐藏文件和权限问题,空文件夹不一定显示正确
选中项目右键打开后再操作文件排序工具
作者: xp3000    时间: 2021-5-20 23:04

我新建一个文件夹,将其他文件夹由系统生成的配置文件,一个或两个,4k,16k或1k大小,复制到新文件夹后重新勾选隐藏,属性上占用空间0,明明有两个文件,大小15k
作者: went    时间: 2021-5-20 23:17

回复 11# went


    当前保留4位小数,如果需要更精确
    右键编辑,ctrf+f查找 {0:f4} MB 修改
作者: newswan    时间: 2021-5-20 23:27

gnu 命令
du
tree -s -d
作者: went    时间: 2021-5-21 00:45

test.bat
ansi编码
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. for /d %%i in (*) do (
  4. echo %%i
  5. for /f "tokens=3" %%a in ('dir /s "%%~i" ^| findstr "个文件"') do set "size=%%a"
  6. set "size=!size:,=!"
  7. set "str_size="
  8. call :_fun "!size!/1024"
  9. if "!b!"=="0" (
  10. REM 字节
  11. set "str_size=!size!B"
  12. ) else (
  13. set "k=!b!"
  14. call :_fun "!b!/1024"
  15. if "!b!"=="0" (
  16. REM KB
  17. set "str_size=!k!KB"
  18. ) else (
  19. set "k=!b!"
  20. call :_fun "!b!/1024"
  21. if "!b!"=="0" (
  22. REM MB
  23. set "str_size=!k!MB"
  24. ) else (
  25. REM GB
  26. set "str_size=!b!GB"
  27. )
  28. )
  29. )
  30. echo !str_size!
  31. echo %%i --^> !str_size!-%%i
  32. rename "%%i" "!str_size!-%%i"
  33. echo -----------
  34. )
  35. pause&exit
  36. :_calc
  37. set "_calc=mshta "javascript:var fso=new ActiveXObject("Scripting.FileSystemObject");fso.GetStandardStream(1).WriteLine(%~1);window.close()""
  38. for /f "delims=" %%i in ('%_calc%') do set "%~2=%%i"
  39. goto :eof
  40. :_split
  41. set "b=%~n1"
  42. set "c=%~x1"
  43. set "c=!c:~1!"
  44. goto :eof
  45. :_fun
  46. call :_calc "%~1" "a"
  47. call :_split "!a!"
  48. goto :eof
复制代码

作者: 8532200    时间: 2021-5-21 00:55

回复 15# went


    感谢回复。
实测成功
不过速度有点慢的太恐怖了。。。。。少量文件夹还可以

很少遇到这么长代码的BAT。。真的非常非常非常感谢。。。这个bat我其实使用频率比较低。。所以之前用的是删除空文件夹那个bat
作者: went    时间: 2021-5-21 01:08

本帖最后由 went 于 2021-5-21 01:11 编辑

回复 16# 8532200


    子文件夹层级数过多,dir /s 命令输出就要很久,耗时就变长
    而且bat并没有处理大数字和浮点数的能力
作者: 8532200    时间: 2021-5-21 10:48

回复 17# went


    我不懂怎么快速。。。但是我有类似bat

这个bat是列出当前文件夹所有文件夹里面有多少文件并且写在文件夹前面。。。速度极度快。。。


@Powershell -v 3 -nolog "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]:efault))").Invoke()}" & pause & exit
$dirItems = Get-ChildItem -Path './' -Directory;
foreach($item in $dirItems)
{
    $files = $item.GetFiles();
    $newName = "{0:d7}" -f ($files.Count);
    $newName += $item.Name;
    Rename-Item -Path $item -NewName $newName;
}







目前求得这个bat我很少很少使用。。所以没事。。。也很少有可能需要遇到几千几万个这样做的文件夹


不管怎样,起码你的这个bat已经很好了,感谢




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2