.bat参数的字符数限制

时间:2019-02-26 07:22:45

标签: windows batch-file

我编写了一个批处理文件来模仿MacOS中的“带有选择的新文件夹”行为。在上下文菜单(带有自定义项)上这样做很麻烦,所以我采用了“发送至”方法。

screenshot of "Send to" in context-menu

我选择一些文件并将它们发送到.bat文件,然后在该文件中执行必要的操作:

@echo off

setlocal enabledelayedexpansion

set "def=New Folder"
set "name=%def%"

set /p name=Folder name: 

set count=1

:loop
if not exist "%name%" goto :continue
set /a count+=1
set "name=%name% (%count%)
goto :loop

:continue
mkdir "%name%"
FOR %%A IN (%*) DO move "%%~A" "%cd%\\%name%"

在我达到字符数限制之前,这确实很好。例如,我在C中创建了一个文件夹“ test”。我有650个空文件:

001.txt
002.txt
003.txt
004.txt
005.txt
...

当我尝试将这些(650)文件发送到我的批处理文件时,它不起作用。我可以发送504个文件,但不能发送505个文件。

问题与数量无关。我已经测试过发送不同长度的文件名/路径,并且计数根据文件名/路径而变化。必须有一些字符限制。当我打印%*时,我得到了(用空格分隔的路径/列表?)

C:\test\001.txt C:\test\002.txt C:\test\003.txt ...

它的长度是8063。

我将文件夹名称“ test”更改为“ te”以减少长度。然后,我可以发送576个文件。 577打破了它。 576个文件再次总计8063个字符。

然后我将“ te”更改为“ t”并再次进行测试。这次我可以发送620个文件,总计8059个字符。发送621个文件会破坏它。所以我要在这里猜测,说这个限制似乎在8064左右。

如果所有参数(路径)的总字符长度超过此限制,则批处理文件将不起作用。

这是为什么?在任何地方都有记录吗?有办法解决这个问题吗?


此外,我不确定这是否与批处理有关。可能与“发送到”有关。由于字符长度,它甚至可能没有调用bat文件。我不知道该如何测试。

0 个答案:

没有答案