Ограничение на количество символов в аргументах .bat - PullRequest
0 голосов
/ 26 февраля 2019

Я написал командный файл для имитации поведения «Новая папка с выделением» в MacOS.Делать это в контекстном меню (с пользовательскими элементами) было неприятно, поэтому я выбрал подход «Отправить».

screenshot of

Я выбираю некоторыефайлы и отправлять их в файл .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%"

Это работает очень хорошо, пока я не достигну предела количества символов.Например, я создал папку «test» в C. У меня есть 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" на ""уменьшить длину.Тогда я мог бы отправить 576 файлов.577 ломает это.Снова 576 файлов составляют 8063 символа.

Затем я изменил «te» на «t» и снова протестировал.На этот раз я мог отправить 620 файлов, что составляет 8059 символов.Отправка 621 файлов ломает его.Итак, я собираюсь угадать здесь и сказать, что ограничение, похоже, составляет около 8064.

Если общая длина символов всех аргументов (путей) превышает этот предел, пакетный файл не работает.

Почему это?Это где-нибудь задокументировано?Есть ли способ обойти это?


Кроме того, я не уверен, что это проблема, связанная с партиями.Это может быть связано с «Отправить».Это может быть даже не вызов файла bat из-за длины символа.Я не знаю, как это проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...