SendTo批处理脚本仅支持87个文件?88个及以上无法执行求助
问题根源
Windows命令行存在最大参数长度限制(通常约8191字符),当你选择88个及以上文件时,所有文件路径的总长度超过了系统允许的上限,导致脚本根本无法被启动——这就是连命令窗口都弹不出来的核心原因。你之前的set file=%*操作会一次性将所有文件路径存入变量,直接触发了长度超限的问题。
修正后的脚本
直接遍历命令行参数,避免一次性加载所有路径到变量中,从根源规避长度限制:
@echo off setlocal enabledelayedexpansion :: 确保输出目录存在 if not exist c:\temp mkdir c:\temp set "output=c:\temp\file.csv" :: 清空输出文件,避免旧内容干扰 echo. > %output% :: 逐个遍历所有传入的文件路径,直接写入输出 set "fileList=" for %%F in (%*) do ( set "fileList=!fileList!%%~npxF," ) :: 移除最后一个多余的逗号(可选) if defined fileList set "fileList=!fileList:~0,-1!" :: 将结果写入文件 echo !fileList! > %output% pause
关键修改说明
- 移除了
set file=%*操作:避免一次性将超长参数存入变量,直接绕过参数长度限制导致的脚本启动失败 - 增加目录检查:确保
c:\temp存在,防止因目录缺失导致的写入失败 - 可选的逗号处理:移除最后一个文件后的多余逗号,让CSV格式更规范
- 保留延迟扩展:确保循环中变量拼接的正确性
极端场景备选方案
如果文件数量极多,连变量fileList都无法容纳所有路径,可以改用逐行追加的方式写入文件,彻底规避变量长度限制:
@echo off setlocal enabledelayedexpansion if not exist c:\temp mkdir c:\temp set "output=c:\temp\file.csv" echo. > %output% :: 逐行写入每个文件路径,每行一个条目 for %%F in (%*) do ( echo %%~npxF >> %output% ) pause
内容的提问来源于stack exchange,提问作者chris everhart
相关产品推荐
相关产品推荐

