【问题标题】:How to get directory list of a folder with subfolders that are longer than 260 chars如何获取具有超过 260 个字符的子文件夹的文件夹的目录列表
【发布时间】:2015-08-18 02:03:59
【问题描述】:

这是我用来生成文件夹大小的代码

for /f "tokens=3,5" %%a in ('
    dir /a /s /w /-c "%target%"
    ^| findstr /b /l /c:"  "
    ') do if "%%b"=="" set "size=%%a"
echo %size%

我遇到了一个问题,其中某些文件夹的子文件夹太多,并且它显示“目录名称“K:\Really\Long\Path\Blah”太长”(不是实际的dir - 实际的 dir 长度超过 260 个字符)。因此,它永远不会获得该文件夹的大小,而且我的大小不正确。

【问题讨论】:

  • 您可以尝试使用 PowerShell 方式。 (别担心。您仍然可以将其放入 .bat 脚本中。)for /f "usebackq" %%a in (`powershell "gci -r -path '%target%' ^| %%{ $s += $_.length }; '{0:N0}' -f $s"`) do set "size=%%a"
  • nope, still get "gci : The specified path, file name, or both are too long. 全限定文件名必须小于 260 个字符,目录名必须小于 248 个字符。”
  • for /f "usebackq" %%a in (`powershell "gci -r -path '%target%' ^| measure -s length ^| %%{ '{0:N0}' -f $_.sum }"`) do set "res=%%a" 怎么样?
  • for /f "usebackq" %%a in (powershell "gci -r -path 'K:\AA\Test aaaa Aaaaaaaaaa\AAAA A\aa-AAAA\Long\Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' | measure -s length ^| %%{ '{0:N0}' -f $_.sum }") do echo %%a ---> 这给了我最后一个输出为 '+' - 我没有看到任何其他正在输出的相关信息

标签: batch-file cmd directory size


【解决方案1】:

这个答案可能对每个人都没有帮助,但对于我使用它的目的来说就足够了。我使用 robocopy 来获取大小,因为它实际上并没有遍历 (?) 并给了我正确的大小,包括那些路径名太长的文件夹(如果你的 full_path 太长而无法开始)

for /f "tokens=1-10,* delims= " %%a in ('
call robocopy "!full_path!" %TEMP% /S /L /BYTES /XJ /NFL /NDL /NJH ^| find "Bytes"') do (
    echo !full_path!: %%c
    set totalsize=%%c
)

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多