【问题标题】:Searching for folders of a size range in cmd在cmd中搜索大小范围的文件夹
【发布时间】:2015-01-16 15:40:20
【问题描述】:

希望有人可以阐明一点,我一直在谷歌上搜索所有可能的方法来做到这一点,但我被困住了。使用我在网上找到的点点滴滴构建了这个。这里的最终目标是自动搜索位于服务器上的文件夹以查找 30kb 或更大的文件夹,并且至少将文件夹名称和位置打印到日志文件中。如果我可以让它将这些匹配的文件夹复制并粘贴到另一个位置,那就太好了,但那会更远一点。这是我到目前为止的块,我知道“find”命令不起作用,我已经研究过使用“forfiles”,但我似乎无法弄清楚如何让它工作。

TL;DR 我如何搜索 30kb 或更大的文件夹,然后将它们打印到日志文件中?我什至接近吗?

dir \\myserverblahblahblah

find -size +30kb -type d -printf "%p %s\n"

folder1\file.txt . > XM8imports.log
rename file.txt filenew.txt >> XM8imports1.log

exit /b 0

感谢您的帮助!

【问题讨论】:

  • robvanderwoude.com/files/diskuse_2k.txt 开头并酌情调整
  • 您对文件夹大小的定义是什么?计算大小时是否将文件包含在子文件夹中?
  • @DavidPostill 谢谢你,我会研究一下,看起来有很多东西要学,所以可能还需要一点时间,但谢谢!
  • @dbenham 我会尽力解释大声笑,所以在我查看的主文件夹中,大约有 500 个文件夹。它们中的大多数是 2kb,而我需要的那些文件里面总是有相同的三个文件,并且是唯一大于 35-38kb 的文件夹。那是你问的吗?感觉现在有点无能

标签: batch-file cmd directory command-prompt


【解决方案1】:

这取决于您对文件夹大小的定义。如果您只包含直接在文件夹中的文件(忽略子文件夹),那么纯批处理还不错:

我相信无论您使用哪种语言,此解决方案都有效。我依赖于这样一个事实,即在 DIR 列表的前 4 行之后,只有文件摘要行可以正好有 4 个空格分隔的标记。大小在第三个标记中。我使用/-C 选项来确保大小不包含数千个分隔符。

大小以字节为单位,因此 30kb = 30*1024 = 30720 字节。

请注意,批处理仅支持带符号的 32 位数字,因此 IF 语句只能在大小

用您的实际根路径替换“yourRootPathHere”。

@echo off
>30k_folders.txt (
  for /d /r "yourRootPathHere" %%F in (*) do (
    for /f "skip=4 tokens=3-5" %%A in (
      'dir /a-d /-c "%%F" 2^>nul'
    ) do if "%%B" neq "" if "%%C" equ "" if %%A gtr 30720 echo %%F
  )
)
type 30k_folders.txt

如果要在测量文件夹大小时包含子文件夹内容,则问题会更加困难。对于纯批处理解决方案,这不是一个实际问题。其中一个问题是您必须将所有子文件夹的大小相加,而 2GB 的数学限制很快就会成为问题。

这个问题很容易在 VB 脚本、JScript 或 PowerShell 中解决。

我的JREN.BAT utility 可以被黑客入侵以轻松获得您想要的结果。

JREN.BAT 是一个混合 JScript/批处理脚本,可以在 XP 以后的任何 Windows 机器上本地运行。它主要用于使用正则表达式搜索和替换重命名文件/文件夹。但它有一个 /LIST 模式,可用于获取您想要的信息。它内置了获取文件夹累积大小的功能,并且不限于2GB。

@echo off
call jren "^.*" "( size() > 30*1024 ) ? path() : ''" /p "YourRootPathHere" /d /list /j /s | findstr . >30k_folders.txt
type 30k_folders.txt

【讨论】:

  • 好的,所以第一个批处理文件看起来正在工作,因为它返回了 3 个文件夹,我没有意识到它们在那里。但它只返回这 3 个,我假设这是因为我需要的文件夹是压缩文件夹。非常感谢您,如果您有关于包含压缩文件夹的建议,那就太好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多