我编写了一个批处理文件来模仿MacOS中的“带有选择的新文件夹”行为。在上下文菜单(带有自定义项)上这样做很麻烦,所以我采用了“发送至”方法。
我选择一些文件并将它们发送到.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文件。我不知道该如何测试。