【发布时间】:2010-03-11 14:44:57
【问题描述】:
我有一个 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 个文件
作为处理的一部分,为每个处理的文件创建一个输出文件,扩展名为.new。当我执行dir *.new 时,它报告存在 65,535 个文件。
所以,我的命令环境似乎对它可以识别的文件数量有一个硬性限制,这个限制是 64K - 1。
- 有没有办法扩展命令环境来管理超过 64K - 1 个文件?
- 如果不能,VBScript 或 JavaScript 是否能够处理所有 206,783 个文件?
我在 Windows 2003 服务器上运行,企业版,32 位。
更新
看起来我的问题的根本原因在于 ZIP 文件的内置 Windows“提取”命令。
我必须处理的文件是通过 ZIP 文件从另一个系统复制的。我的服务器没有安装 ZIP 实用程序,只安装了本机 Windows 命令。我右键单击 ZIP 文件,然后执行“全部提取...”,这显然只是提取了前 65,535 个文件。
我将 7-zip 下载并安装到我的服务器上,解压缩所有文件,我的批处理脚本按预期工作。
【问题讨论】:
-
program.exe做了什么?是内部开发的吗?还是您下载的一些第三方工具?program.exe可以接受参数,例如program.exe *.xml吗?您的输出真的必须是每 1 个输入文件 1 个文件吗? -
@ghostdog74; program.exe 是内部开发的,不幸的是它一次只能处理一个文件(我在 QA 工作,所以我对程序的设计没有多少发言权)。并且程序目前的设计方式是,每个输入文件会创建 1 个输出文件。
-
现在可能是您学习 PowerShell 的时候了。从 16 位计算时代开始,您似乎已经达到了极限,这不足为奇。
标签: windows batch-file