gpt4 book ai didi

windows - 如何绕过批处理文件处理限制

转载 作者:可可西里 更新时间:2023-11-01 14:15:56 24 4
gpt4 key购买 nike

我有一个 Windows 批处理文件,可以处理给定目录中的所有文件。我有 206,783 个文件需要处理:

for %%f in (*.xml) do call :PROCESS %%f
goto :STOP

:PROCESS
:: do something with the file
program.exe %1 > %1.new
set /a COUNTER=%COUNTER%+1
goto :EOF

:STOP
@echo %COUNTER% files processed

当我运行批处理文件时,会写入以下输出:

65535 files processed

作为处理的一部分,为每个处理的文件创建一个输出文件,扩展名为 .new。当我执行 dir *.new 时,它报告存在 65,535 个文件。

所以,看来我的命令环境对它可以识别的文件数量有一个硬性限制,这个限制是 64K - 1。

  1. 有没有办法扩展命令环境以管理超过 64K - 1 个文件?
  2. 如果没有,VBScript 或 JavaScript 是否能够处理所有 206,783 个文件?

我在 Windows 2003 服务器企业版 32 位上运行。


更新

看来我的问题的根本原因是内置的 Windows“提取”ZIP 文件命令。

我必须处理的文件是通过 ZIP 文件从另一个系统复制的。我的服务器没有安装 ZIP 实用程序,只有 native Windows 命令。我右键单击 ZIP 文件,然后执行“全部提取...”,这显然只是提取了前 65,535 个文件。

我将 7-zip 下载并安装到我的服务器上,解压所有文件,我的批处理脚本按预期工作。

最佳答案

另一种选择可能是遍历 dir 的输出,而不是直接遍历文件。我通常讨厌人们这样做,但显然 标准迭代习语有局限性。

for /f "delims=" %%f in ('dir /b *.xml') do call :PROCESS %%f 

我目前正在尝试这个,但可能需要一段时间;刚刚用 10 万个文件填充了一个目录。

但请记住,如果您使用的是 Raster 字体,则使用命令的输出会出现 Unicode 问题,因此请确保您的控制台窗口具有 Lucida Console 或其他 TrueType 字体集。否则,Unicode 字符会解析为问号或当前代码页中最接近的等价物——但程序将找不到该文件。

预计到达时间:显然这不是问题所在。你的代码和我的测试代码在 Windows Server 2k3 R2、32 位和 Windows 7 上迭代 dir 输出过程 300k 文件。

关于windows - 如何绕过批处理文件处理限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com