Windows cmd слишком длинная входная строка

Наиболее частые ошибки, заметки особенностей программинга BAT файлов, баги интерпретатора* CMD/BAT Решение и ответ на вопрос 757799

Заметки
6) Инициализация числового типа данных
Переменную числового типа можно инициализировать изначально как строковой тип.
Это будет полезно, когда мы не знаем заранее, попадет ли в нее вообще значение.
Например,

Bash
1
2
3
4
::%1 - Некое значение извне (возможно пустое)
::n - Оперируемая переменная
Set n=%~1
set /A n+=1

Не выдаст ошибку. Переменная n просто уничтожится.

Bash
1
2
3
4
::%1 - Некое значение извне (возможно пустое)
::n - Оперируемая переменная
Set /A n=%~1
set /A n+=1

Приведет к синтаксической ошибке в строке № 3.

7) EOL в цикле FOR — правильный порядок модификаторов
EOL — это модификатор цикла, который определяет знак комментария.
Если такой знак встречается первым в строке разбираемого файла, цикл пропускает данную строку.

Код

;Эта строка будет опущена при разборе циклом for /f %%a in (file.txt) do echo.%%a
А; эта будет напечатана

По-умолчанию в EOL установлен знак — точка с запятой ( ; )
Чтобы установить пустой знак (без пропуска комментариев), EOL должен обязательно стоять последним среди модификаторов:

Bash

for "UseBackq delims= eol=" %%a in ("file.txt") do Echo.%%a

Иначе, в отличие от модификатора delims, EOL примет за знак комментария символ пробела.

Bash
1
2
::EOL = символ пробела. Строки, начинающиеся с пробела, будут пропущены!!!
for "UseBackq eol= delims=" %%a in ("file.txt") do Echo.%%a

8) Как проверить — существует ли папка (именно папка, а не файл).
Добавляем в конец имени бекслеш ()

Bash

if exist "c:folder" echo Папка folder существует& exit /B
if exist "c:folder" echo Файл folder существует& exit /B
echo Ни папка, ни файл под именем folder не существуют

Тоже самое касается копирования файлов в папку.
Если такая папка не существует файл будет скопирован в предыдущий каталог с новым именем (предполагаемым названием этой папки).
Мало того теперь и папку нельзя будет создать (

ведь в одном каталоге не могут существовать папка и файл с одинаковым именем!

)
Чтобы обойти эту случайную (досадную) ошибку, дописываем в конец целевого каталога бекслеш ()

Bash

copy "file.txt" "c:folder"
if %errorlevel% neq 0 echo Возникла ошибка

Конечно, лучше заранее побеспокоится, чтобы создать каталог, или использовать команду XCOPY,
но ведь разные ситуации бывают, не правда ли?

9) Использовать UseBackQ при чтении содержимого файла, имя которого может меняться
Есть 2 варианта опций цикла FOR, которые обеспечивают чтение содержимого файла построчно:

Bash

for /f "delims=" %%a in (file.txt) do echo %%a

Bash

for /f "UseBackQ delims=" %%a in ("file.txt") do echo %%a

В этом варианте все равнозначно.
Но, если вместо file.txt подставить переменную, имя которой (или путь) будут содержать пробелы (а мы заранее можем и не знать), 1-я конструкция не подойдет и будет сначала разбивать строку по пробелам, а уж затем искать данный файл.
Поэтому конструкция с модификатором UseBackQ здесь наиболее приемлема.

Рекомендации
10) Не использовать && после команды Del.
Del возвращает ErrorLevel 0 при возникновении ошибок вида «Отказано в доступе».
Используйте вместо этого конструкцию If not exist

Bash

::Так не рекомендую
del file.txt&& ren file2.txt file.txt
::Так следует делать
del file.txt
if not exist file.txt (ren file2.txt file.txt) else (echo файл file.txt занят другой программой)

11) Внимательно выбирайте имя для BAT(CMD)-файла
Имя не должно носить название распространенных программ и тем более внутренних команд CMD.
Иначе рано или сразу Вы получите зацикливание (вызов батником самого себя).
Вырезка из темы: Неоднозначный ответ ping

Цитата
Сообщение от gimntut
Посмотреть сообщение

Порядок исполняемых расширений задаётся переменной PATHEXT
Его можно менять и расширять.
Сначала ищется подходящий исполняемый в текущей папке, а потом уже ищет по переменной Path.
Поэтому до .ping.bat доходит раньше, чем до %SYSTEMROOT%SYSTEM32ping.exe.
Поэтому если хотим, чтобы запускался именно ping.exe, то так и нужно писать

12) После перехода в другой каталог проверять успех операции
Иначе может получиться, что Вы работаете совершенно с другой папкой.
Причины могут быть разные, например, доступ к папке запрещен, не хватает прав, или папка не существует…

Bash

::Переход в другой каталог с одновременной сменой диска (если такова требуется)
chdir /d "d:test"
::Проверка, достигли ли цели
if %errorlevel%==0 Echo Выполняем нужные действия
::Или, как вариант, проверяем где сейчас находимся
if "%cd%"=="d:test" Echo Продолжаем банкет :^)

Заметки
13) Сохранение концевого пробела в переменную

Bash
1
2
3
4
::Вариант 1
Set "st=Строка с концевым пробелом "
::Вариант 2
(Set st=Строка с концевым пробелом )

14) Обход ошибки «Режим вывода команд на экран (ECHO) включен»
Если есть вероятность попадания под Echo переменной без значения,
сразу после Echo ставим точку:

Будет выведена пустая строка.

15) Граничные значения для числового типа в CMD
Числовой тип в CMD может принимать целые значения в пределах от -2147483647 до 2147483647.
Тем не менее, код возврата может принимать значение на 1 (единичку) меньше минимума. Проверим?

Bash

Call :ErrorLevelMinimal
Echo %ErrorLevel%
pause&goto :eof
:ErrorLevelMinimal
exit /b -2147483648

Ошибки
16) Пробелы тоже могут являться частью названия переменной
Частая ошибка новичков

Bash
1
2
3
4
5
6
7
8
9
10
::Неправильное присвоение
Set n =9
::Вот так результат не получим!!!
Echo %n%
::Хотя вытащить из нее значение все равно можно
Echo %n %
::А сейчас верный вариант
Set n=9
::Получаем результат, как обычно
Echo %n%

Добавлено через 15 часов 20 минут
Интересное обсуждение Открывающаяся скобка в командном процессоре
Подключайтесь!

curl --request POST --url https://ship.amazon.in/swaapi/v2/some_id/shipments --header 'cache-control: no-cache' --header 'content-type: application/json' --header 'x-swa-token: Atc|MQEBIKSFsFpAwAZc6hHjeAAPfqdgFxhfSD5vIGW34BJG4nUaHayUtfxBkj_ssIs_46_NhW8QvCbpNha1wgZFBYmrfhCzocI4S7bs5XKi6FUE14wI_aHeVVGAItVkAOlkSJ7C29SXh2iIdcfDWrUv6lRwqY8DIH2BCLkr2N0XNcw8Ecxz-yrM5CeDr5bbYFN06TMRKH8KSumL625kOWfhoTClHuVosne-55ucG9BSOL62EoqMUsHeqKGkmR6G8L2XQRkL4yipUOqGtlT1OiOppf6o8svFJVnuJj9eOLbKGl4HdKVpoA' --data'{"transaction":{"transactionIdentifier":"1234"},"shipmentRequest":{"destination":{"address":{"mailingAddress":{"countryCode":"IN","postalCode":"110034","city":"Surat","addressLine1":"Marutidham","attentionName":"MeghaRajpara"}}},"containers":[{"value":{"value":100,"unit":"INR"},"valueAddedServiceProperties":{"collectOnDeliveryProperties":{"containerCODAmount":{"unit":"INR","value":450},"itemLevelCODAmounts":[{"itemId":"ITEM-1","amount":{"unit":"INR","value":2300}}]}},"identifiers":{"clientRefId":"43f65667-921b-4822-a346-d4c8ac886789","containerReferenceId":"7df1c643-be34-45b7-aac4-04faaad7dc3f"},"physicalAttributes":{"height":{"unit":"CM","value":10},"length":{"unit":"CM","value":10},"width":{"unit":"CM","value":5},"weight":{"unit":"G","value":50}},"itemInfo":[{"unitPrice":{"value":100,"unit":"INR"}}]}],"expectedServiceOffering":{"expectedPromise":{"receiveWindow":{"dateTimeRange":{"start":"2017-04-23T05:05:24.094Z"}}}},"clientReferenceId":"a1a924a3-7cbe-44b1-9a91-f09c1879011f","origin":{"address":{"mailingAddress":{"countryCode":"IN","postalCode":"395006","city":"Surat","addressLine1":"Marutidham","attentionName":"MeghaRajpara"}}},"shippingPurpose":"SALE"}}'

The above command give me the following error:

The input line is too long.

How can I resolve this?

curl --request POST --url https://ship.amazon.in/swaapi/v2/some_id/shipments --header 'cache-control: no-cache' --header 'content-type: application/json' --header 'x-swa-token: Atc|MQEBIKSFsFpAwAZc6hHjeAAPfqdgFxhfSD5vIGW34BJG4nUaHayUtfxBkj_ssIs_46_NhW8QvCbpNha1wgZFBYmrfhCzocI4S7bs5XKi6FUE14wI_aHeVVGAItVkAOlkSJ7C29SXh2iIdcfDWrUv6lRwqY8DIH2BCLkr2N0XNcw8Ecxz-yrM5CeDr5bbYFN06TMRKH8KSumL625kOWfhoTClHuVosne-55ucG9BSOL62EoqMUsHeqKGkmR6G8L2XQRkL4yipUOqGtlT1OiOppf6o8svFJVnuJj9eOLbKGl4HdKVpoA' --data'{"transaction":{"transactionIdentifier":"1234"},"shipmentRequest":{"destination":{"address":{"mailingAddress":{"countryCode":"IN","postalCode":"110034","city":"Surat","addressLine1":"Marutidham","attentionName":"MeghaRajpara"}}},"containers":[{"value":{"value":100,"unit":"INR"},"valueAddedServiceProperties":{"collectOnDeliveryProperties":{"containerCODAmount":{"unit":"INR","value":450},"itemLevelCODAmounts":[{"itemId":"ITEM-1","amount":{"unit":"INR","value":2300}}]}},"identifiers":{"clientRefId":"43f65667-921b-4822-a346-d4c8ac886789","containerReferenceId":"7df1c643-be34-45b7-aac4-04faaad7dc3f"},"physicalAttributes":{"height":{"unit":"CM","value":10},"length":{"unit":"CM","value":10},"width":{"unit":"CM","value":5},"weight":{"unit":"G","value":50}},"itemInfo":[{"unitPrice":{"value":100,"unit":"INR"}}]}],"expectedServiceOffering":{"expectedPromise":{"receiveWindow":{"dateTimeRange":{"start":"2017-04-23T05:05:24.094Z"}}}},"clientReferenceId":"a1a924a3-7cbe-44b1-9a91-f09c1879011f","origin":{"address":{"mailingAddress":{"countryCode":"IN","postalCode":"395006","city":"Surat","addressLine1":"Marutidham","attentionName":"MeghaRajpara"}}},"shippingPurpose":"SALE"}}'

The above command give me the following error:

The input line is too long.

How can I resolve this?

У меня возникла проблема с исполнением bat файла. По прошествии некоторого времени я получаю сообщение «слишком длинная строка ввода».

Структура файла bat проста. Существует основной файл bat, который вызывает 10 других файлов bat, которые отвечают за обновление данных моих системных модулей. В файлах bat данных обновления есть много вызовов для команды (.cmd файла) моей системы, которая отвечает за обновление данных с помощью некоторых вычислений.

Дело в том, что, когда процесс выполнялся на сервере Windows 2003 Server, все было в порядке. Нет ошибок.

Затем, когда он был обновлен до Windows 2008 Server, я запускаю основной файл bat, через несколько часов я получил сообщение «Ошибка ввода слишком длинная». Я даже не могу выполнить любую команду, включенную в обновленные бит данных вручную в этом окне cmd. Но если я закрою окно cmd и открою новый, я смогу выполнить команды без ошибок.

У кого-то была такая же проблема? Или решение?

Спасибо заранее.

4b9b3361

Ответ 1

У меня была такая же проблема при выполнении сборки script в CMD-окне. Примерно в 13 раз я получил ту же ошибку. Конструкция script должна была убедиться, что vcvarsall.bat запущен, поэтому он запускает vcvarsall.bat каждый раз.

vcvarsall.bat недостаточно умен, чтобы добавлять вещи в path, если они еще не существуют, поэтому добавлена ​​куча повторяющихся записей.

Мое решение состояло в том, чтобы добавить проверочную проверку, если я определен, для переменной среды, которую, как мне известно, устанавливается vcvarsall.bat…

if not defined DevEnvDir (
    call vcvarsall.bat
)

Проверьте переменную окружения пути после каждого прогона и посмотрите, растет ли она. Если это так и есть дубликаты, вам нужно быть умным о добавлении материала в path. Есть несколько способов быть умными.

Ответ 2

Я случайно получил эту ошибку сразу после запуска одного и того же набора команд (остановить/запустить сервер приложений) несколько раз.

Ошибка прекратилась, когда я открыл новую командную строку и попробовал команды из новой консоли командной строки.

Ответ 3

Я понимаю, что это довольно старая проблема, но другой проблемой, с которой я столкнулся, было " в конце команды, которую я вызывал. Я пытался вызвать:

"C:Program Files (x86)Microsoft Visual Studio 12.0Common7Tools..IDECommonExtensionsMicrosoftTestWindowvstest.console.exe""

Если вы заметили, у меня есть два " в конце строки. Это вызывало мои проблемы (Notepad++ включало его, когда я набирал кавычки). Удалил это, все хорошо. Опять же, может быть, не ваша проблема, но если кто-то остальное приходит в поисках информации, и больше ничего не работает, проверьте это. :)

Ответ 4

На эту тему есть статья в базе знаний Windows. Они не упоминают сервер Windows 2008, но упоминают разницу в размерах между другими версиями ОС, поэтому неудивительно, что между 2003 и 2008 годами была разница.

Что касается решения проблемы, некоторые из их предложений включают в себя:

  • Измените программы, которым требуются длинные командные строки, чтобы они использовали файл, содержащий информацию о параметрах, а затем включите имя файла в командную строку.
  • Используйте более короткие имена для папок и файлов.
  • Уменьшите глубину деревьев папок.

Вы можете прочитать всю статью, если хотите узнать, что еще они могут сказать, но именно эти предложения, скорее всего, применимы к вам.

Ответ 5

Это также может произойти, если пробелы в вашем файле (ansi character 0x20) — действительно неразрывные пробелы (у меня 0xA0, но ваш может варьироваться). Это может произойти, если вы копируете/вставляете из Интернета в редактор UTF-8.

Результат зависит от текущей кодовой страницы окон, вашего редактора и т.д. Исправить:

  • Используйте шестнадцатеричный редактор
  • Посмотрите, как представлены пространства.
  • Поиск и замена вашего представления

Я использовал HxD для поиска и замены 0xA0 до 0x20.

Ответ 6

Я столкнулся с этим также.

Я пытался запустить vcvars.bat, как другие здесь, кажется, пытаются.

Основная проблема для меня заключалась в том, что моя переменная PATH была загрязнена повторениями и без того довольно длинного пути. Исправление моего пути, казалось, решило проблему для меня (в новом терминале, конечно). Обратите внимание, что это исправление не относится к vcvars.bat или к чему-либо связанному с Visual Studio.

Мне любопытно, если решение @Cookie Butter — это обходной путь и основная проблема та же.

Проблема не в слишком длинной строке, потому что ваша команда имеет только 1673 символа, а ограничение составляет 8191 символ для команд, входящих в cmd.exe

На компьютерах под управлением Microsoft Windows XP или новее максимальная длина строки, которую можно использовать в командной строке, составляет 8191 символ. На компьютерах под управлением Microsoft Windows 2000 или Windows NT 4.0 максимальная длина строки, которую можно использовать в командной строке, составляет 2047 символов.

https://support.microsoft.com/en-us/help/830473/command-prompt-cmd.-exe-command-line-string-limitation

Теперь посмотри на свою команду

curl ... --header 'cache-control: no-cache' --header 'content-type: application/json'
--header 'x-swa-token: Atc|MQEBIKSFsFpAwAZc6hHjeAAPfqdgFxhfSD5vIGW34BJG4nUaHayUtfxBkj
_ssIs_46_NhW8QvCbpNha1wgZFBYmrfhCzocI4S7bs5XKi6FUE14wI
_aHeVVGAItVkAOlkSJ7C29SXh2iIdcfDWrUv6lRwqY8DIH2BCLkr2N0XNcw8Ecxz
-yrM5CeDr5bbYFN06TMRKH8KSumL625kOWfhoTClHuVosne-55ucG9BSOL62EoqMU
sHeqKGkmR6G8L2XQRkL4yipUOqGtlT1OiOppf6o8svFJVnuJj9eOLbKGl4HdKVpoA...'

Одинарная кавычка ' не является символом кавычек в Windows, поэтому в отличие от того, что можно ожидать, 'cache-control: no-cache' будет передаваться как 2 отдельных параметра: 'cache-control: and no-cache'

В результате в 'x-swa-token: Atc|MQEBIKSFsFpAwAZc6hHjeAAPfqd... 'x-swa-token: Atc будет распознана как последние 2 параметра первой команды, чей вывод будет передан в команду с именем MQEBIKSFsFpAwAZc6hHjeAAPfqd... которого, вероятно, не существует

Вам нужно изменить одинарные кавычки на двойные. Тем не менее, поскольку вы используете вложенные двойные кавычки внутри строк, это будет затруднительно.


Тем не менее, существуют различные решения. В PowerShell ' можно использовать для цитирования строк, так что вы можете просто избежать устаревшего cmd.exe и использовать PowerShell с вышеуказанной командой как есть. Более новая Windows 10 также не поддерживает cmd.exe и использует PowerShell по умолчанию.

В любом случае в PowerShell уже есть net.webclient.DownloadString так что вы можете использовать его напрямую, устраняя необходимость в curl

Начиная с build 17063, curl также встроен в Windows 10, и вы можете использовать его напрямую

Ошибка «Слишком длинная строка ввода» в BAT-файле

У меня проблема с запуском bat-файла. Через некоторое время я получаю сообщение об ошибке «строка ввода слишком длинная».

Структура bat-файла проста. Есть основной bat-файл, который вызывает 10 других bat-файлов, отвечающих за обновление данных моих системных модулей. В файлах обновления данных bat есть много вызовов команды (файл .cmd) моей системы, которая отвечает за обновление данных посредством некоторых вычислений.

Дело в том, что когда процесс работал на сервере Windows 2003, все было в порядке. Нет ошибок.

Затем, когда он был обновлен до Windows 2008 Server, я запускаю основной bat-файл, через несколько часов я получаю ошибку «Слишком длинная строка ввода». Я даже не могу выполнить какую-либо команду, включенную в обновленные данные, вручную в этом окне cmd. Но если я закрою окно cmd и открою новое, я смогу выполнять команды без ошибок.

У кого-нибудь была такая же проблема? Или решение?

Заранее спасибо.

11 ответы

У меня была такая же проблема при выполнении сценария сборки в окне cmd. Примерно через 13 раз я получил ту же ошибку. Сценарий сборки должен был убедиться, что vcvarsall.bat запущен, поэтому он выполнял vcvarsall.bat каждый раз.

vcvarsall.bat недостаточно умен, чтобы добавлять вещи только в path если их еще нет, поэтому была добавлена ​​​​куча повторяющихся записей.

Мое решение состояло в том, чтобы добавить проверку, если определено, для переменной среды, которая, как я знаю, установлена ​​vcvarsall.bat…

if not defined DevEnvDir (
    call vcvarsall.bat
)

Проверяйте переменную среды вашего пути после каждого запуска и смотрите, растет ли она. Если это так и есть дубликаты, вам нужно быть умным, добавляя что-то в path. Есть несколько способов проявить смекалку.

ответ дан 27 мая ’14, 20:05

Я столкнулся с этой ошибкой только сейчас впервые после запуска одного и того же набора команд (остановить / запустить сервер приложений) несколько раз.

Ошибка прекратилась, когда я открыл новую командную строку и попробовал команды из новой консоли командной строки.

Создан 11 ноя.

Обычно это происходит из-за длинного пути. Я решил эту проблему, заменив базовый путь Kafka из C:Программные файлы в C:Кафка

ответ дан 27 дек ’20, 14:12

Я понимаю, что это довольно старо, но другая проблема, с которой я столкнулся, заключалась в том, что " в конце команды, которую я вызывал. Я пытался позвонить:

"C:Program Files (x86)Microsoft Visual Studio 12.0Common7Tools..IDECommonExtensionsMicrosoftTestWindowvstest.console.exe""

Если вы заметили, у меня есть два " в конце строки. Это вызывало мои проблемы (Notepad ++ включал его, когда я печатал кавычки). Удалил, все хорошо. Опять же, это может быть не ваша проблема, но если кто-то еще придет в поисках информации, и ничего не работает, проверьте это. :)

ответ дан 13 мая ’19, 08:05

Eсть Статья базы знаний Windows на эту тему. Они не упоминают сервер Windows 2008, но упоминают разницу в размере между другими версиями ОС, поэтому неудивительно, что между 2003 и 2008 годами была разница.

Что касается решения проблемы, некоторые из их предложений включают:

  • Измените программы, требующие длинных командных строк, чтобы они использовали файл, содержащий информацию о параметрах, а затем включали имя файла в командную строку.
  • Используйте более короткие имена для папок и файлов.
  • Уменьшите глубину деревьев папок.

Вы можете прочитать всю статью, если хотите узнать, что еще они могут сказать, но это были предложения, которые, скорее всего, применимы к вам.

ответ дан 29 мая ’13, 22:05

Переименуйте папку в Kafka. Это работало нормально для меня. Закройте cmd и запустите его снова. Это точно сработает!!

До :
Введите описание изображения здесь

После :
Введите описание изображения здесь

ответ дан 06 авг.

У меня такая же проблема, чтобы запустить zookeeper под окном. Основная причина заключается в том, что путь к файлу слишком длинный. Я переместил папку kafka на более короткий путь к файлу. Например: c:/kafka_2.13-2.6.0. затем перейдите в bin/windows и запустите zookeeper. Оно работает.

Создан 05 июля ’21, 16:07

когда необходимо вызвать vcvarscall.bat несколько раз, то:

setlocal
vcvarsall.bat x64
cl xxx.cpp
endlocal

setlocal
vcvarsall.bat x86
cl xxx.cpp
endlocal

ответ дан 29 мар ’21, в 10:03

Это также может произойти, если пробелы в вашем файле (символы ansi 0x20) действительно неразрывные пробелы (у меня было 0xA0, но у вас может быть иначе). Это может произойти, если вы скопировали/вставили из Интернета в редактор, поддерживающий UTF-8.

Результат зависит от текущей кодовой страницы Windows, вашего редактора и тому подобного. Исправить:

  1. Используйте шестнадцатеричный редактор
  2. Посмотрите, как представлены пробелы
  3. Поиск и замена вашего представления

я использовал HxD искать и заменять 0xA0 в 0x20.

Создан 01 июн.

использование CALL несколько раз для запуска другого пакета, который устанавливает env, будет увеличивать значение устанавливаемой вами переменной, следовательно, в какой-то момент возникает ошибка

вызов установить путь=некоторыйпуть;%путь%

запуск вышеуказанной команды в cmd много раз приведет к ошибке

ответ дан 11 дек ’19, 14:12

Я также столкнулся с этим.

Я пытался запустить vcvars.bat, как и другие здесь.

Основная проблема для меня заключалась в том, что моя переменная PATH была загрязнена повторениями уже довольно длинного пути. Исправление моего пути, казалось, решило проблему для меня (конечно, в новом терминале). Обратите внимание, что это исправление не относится к vcvars.bat или чему-либо, связанному с Visual Studio.

Мне любопытно, является ли решение Cookie Butter обходным путем, и основная проблема такая же.

ответ дан 15 мая ’19, 14:05

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

windows
batch-file

or задайте свой вопрос.

То, что сделать с “Входной строкой, является слишком длинным” сообщением об ошибке?

Я собираюсь игнорировать первый сегмент сценария, так как кажется, что вы заботитесь только о части .click. То, что вы можете сделать, это иметь переменную, которая чередуется между 0.0 и 0.8, и иметь значение, на которое установлена ​​громкость. Грубый макет ниже:

var change = 0.8
$(function() {
    $("#myVideo").click(function() {
        this.volume = change;  
        if (change == 0.8) { change = 0.0 }
        else { change = 0.8 }                          
    });
});

задан Tony Trozzo 4 September 2013 в 15:37

поделиться

5 ответов

Необходимо использовать модуль подпроцесса вместо этого. См. этот небольшой документ для того, как переписать вызовы os.system для использования подпроцесса.

ответ дан 3 December 2019 в 15:06

поделиться

Необходимо использовать подпроцесс вместо os.system.

подпроцесс имеет преимущество способности изменить каталог для Вас:

import subprocess
my_cwd = r"..folder"
my_process = subprocess.Popen(["command name", "option 1", "option 2"], cwd=my_cwd)
my_process.wait() # wait for process to end
if my_process.returncode != 0:
    print "Something went wrong!"

Модуль подпроцесса содержит некоторые функции помощника также если вышеупомянутые немного подробные взгляды.

ответ дан 3 December 2019 в 15:06

поделиться

Принятие Вас использует окна от обратных косых черт, Вы могли записать .bat файл из Python и затем os.system() на этом. Это — взлом.

ответ дан 3 December 2019 в 15:06

поделиться

Удостоверьтесь, когда Вы используете » в Ваших строках, что их правильно оставляют.

Python использует » в качестве символа ESC, таким образом, строка "..folderfilename" оценивает к "..folderfilename" так как завершенный f является все еще f.

Вы, вероятно, хотите использовать

r"..folderfilename"

или

"..\folder\filename"

ответ дан 3 December 2019 в 15:06

поделиться

Даже неплохо использовать subprocess.Popen(), но это не решает проблему.

Ваша проблема не в 255 символах, это было верно во времена DOS, позже увеличилось до 2048 для Windows NT/2000 и снова увеличилось до 8192 для Windows XP+.

Настоящее решение состоит в том, чтобы обойти очень старую ошибку в Windows API: _popen() и _wpopen().

Если вы используете кавычки в командной строке, вы должны добавить всю команду в кавычки, иначе вы получите сообщение об ошибке Слишком длинная строка ввода.

Все операционные системы Microsoft, начиная с Windows XP, имели ограничение в 8192 символа, что теперь достаточно для любого приличного использования командной строки, но они забыли решить эту ошибку.

Чтобы преодолеть их ошибку , просто заключите всю команду в двойные кавычки, а если вы хотите узнать больше, прочитайте комментарий MSDN к _popen().

Будьте осторожны, потому что это работает:

prog
"prog"
""prog" param"
""prog" "param""

Но это не будет работать:

""prog param""

Если вам нужна функция, которая добавляет кавычки, когда они нужны, вы можете взять ее с http://github. com/ssbarnea/tendo/blob/master/tendo/tee.py

ответ дан 3 December 2019 в 15:06

поделиться

Другие вопросы по тегам:

Похожие вопросы:

I am having a problem executing a bat file. After some time running I get the «input line is too long» error.

The structure of the bat file is simple. There is a main bat file that calls 10 other bat files that are responsible for updating data of my system modules. In the updating data bat files there are lot of calls for a command(.cmd file) of my system that is responsible for updating the data through some calculations.

The point is, when the process was running in a Windows 2003 Server it was ok. No errors.

Then, when it was upgraded to Windows 2008 Server, I execute the main bat file, several hours later I got the «Input line is too long» error. I can’t even execute any command included in the updated data bats manually in that cmd window. But if I close the cmd window and open a new one I can execute the commands without errors.

What’s the solution to this?

user's user avatar

user

4,3515 gold badges17 silver badges34 bronze badges

asked May 29, 2013 at 18:57

Carlos Grossi's user avatar

10

I have had this same problem when executing a build script in a cmd window. After about 13 times I got that same error. The build script had to make sure that vcvarsall.bat was run so it executed vcvarsall.bat every time.

vcvarsall.bat is not smart enough to only add things to the path if they are not already there so a bunch of duplicate entries were added.

My solution was to add an if defined check on an environment variable which I know is set by vcvarsall.bat…

if not defined DevEnvDir (
    call vcvarsall.bat
)

Check your path environment variable after each run and see if it is growing. If it is and there are duplicates, you will need to be smart about adding stuff to the path. There are several ways to be smart about it.

answered Nov 12, 2013 at 12:54

Okkenator's user avatar

OkkenatorOkkenator

1,6141 gold badge15 silver badges27 bronze badges

2

I happened upon this error just now for the first time after running the same set of commands (stop / start an application server) a number of times.

The error stopped when I opened up a new command line and tried the commands from the new command line console.

answered Nov 11, 2013 at 22:42

Jim Bethancourt's user avatar

0

This usually happens due to long path. I have resolved this issue by replacing base path of Kafka from C:Program Files<Kafka_path> to C:Kafka

answered Dec 27, 2020 at 14:43

Amol Patil's user avatar

Amol PatilAmol Patil

1772 silver badges11 bronze badges

1

I realize this is pretty old, but the other issue I ran into was having a " at the end of the command I was calling. I was attempting to call:

"C:Program Files (x86)Microsoft Visual Studio 12.0Common7Tools..IDECommonExtensionsMicrosoftTestWindowvstest.console.exe""

If you notice, I have two " at the end of the line. This was causing my issues (Notepad++ included it when I typed the quotes). Removed that, all good. Again, may not be your issue, but if anyone else comes seeking info and nothing else works, check this. :)

Cà phê đen's user avatar

Cà phê đen

1,8372 gold badges20 silver badges19 bronze badges

answered Nov 9, 2015 at 16:37

Chris's user avatar

ChrisChris

7111 gold badge7 silver badges18 bronze badges

1

There is a Windows knowledge base article on this subject. They don’t mention Windows 2008 server, but they did mention the difference in size between other versions of the OS, so it wouldn’t be surprising is there was a difference between 2003 and 2008.

As for solutions to the problem, some of their suggestions include:

  • Modify programs that require long command lines so that they use a file that contains the parameter information, and then include the name of the file in the command line.
  • Use shorter names for folders and files.
  • Reduce the depth of folder trees.

You can read the whole article if you want to see what else they have to say, but those were the suggestions that looked most likely to apply to you.

answered May 29, 2013 at 21:19

James Holderness's user avatar

James HoldernessJames Holderness

22.6k2 gold badges38 silver badges52 bronze badges

Rename the folder name to Kafka . It worked fine for me . Close the cmd and start it again . That will definitely work fine !!

Before :
enter image description here

After :
enter image description here

zhangxaochen's user avatar

zhangxaochen

32k15 gold badges76 silver badges106 bronze badges

answered Aug 5, 2021 at 8:37

Rishi Pollai's user avatar

1

I have the same issue to start zookeeper under window. The root cause is due to file path is too long. I relocated the kafka folder to shorter file path. For example : c:/kafka_2.13-2.6.0. then cd to bin/windows and start zookeeper. It works.

answered Jul 5, 2021 at 15:48

Sriharsha g.r.v's user avatar

when it’s necessary to call vcvarscall.bat multiple times, then:

setlocal
vcvarsall.bat x64
cl xxx.cpp
endlocal

setlocal
vcvarsall.bat x86
cl xxx.cpp
endlocal

answered Mar 29, 2021 at 9:52

BgBgBgBsBsBs's user avatar

It can also happen if the spaces in your file (ansi character 0x20) are really non-breaking spaces (I had 0xA0, but yours may vary). This can happen if you copy/pasted from the internet to a UTF-8 aware editor.

The result depends on the current codepage of windows, your editor and such. To fix:

  1. Use an hexadecimal editor
  2. Look at how spaces are represented
  3. Search and replace your representation

I used HxD to search and replace 0xA0 to 0x20.

answered Jun 1, 2017 at 15:52

ixe013's user avatar

ixe013ixe013

9,2563 gold badges49 silver badges75 bronze badges

using CALL several times to run another batch that sets env will increment the value of the var you are setting,hence the error at some point

call set path=somepath;%path%

running the above command in cmd for many times will produce the error

answered Dec 11, 2019 at 14:48

Hossam Houssein's user avatar

0

I ran into this also.

I was trying to run vcvars.bat as others here seem to be trying.

The underlying problem for me seemed to be that my PATH variable was polluted with repeats of an already pretty lengthy path. Fixing up my path seemed to fix the issue for me (in a new terminal, of course). Note that this fix isn’t specific to vcvars.bat or anything Visual Studio related.

I’m curious if Cookie Butter’s solution is a workaround and the underlying problem is the same.

answered May 15, 2019 at 13:16

sg_man's user avatar

sg_mansg_man

7031 gold badge6 silver badges13 bronze badges

1

This happens due to long path or long name of directory . I have resolved this by renaming the folder name by removing the version from it and placing the folder to c: directory.
Example —
from = C:UsersrsolaDownloadskafka_2.13-3.3.1
to = C:kafka

answered Oct 10, 2022 at 7:10

Suvigya Saxena's user avatar

I am having a problem executing a bat file. After some time running I get the «input line is too long» error.

The structure of the bat file is simple. There is a main bat file that calls 10 other bat files that are responsible for updating data of my system modules. In the updating data bat files there are lot of calls for a command(.cmd file) of my system that is responsible for updating the data through some calculations.

The point is, when the process was running in a Windows 2003 Server it was ok. No errors.

Then, when it was upgraded to Windows 2008 Server, I execute the main bat file, several hours later I got the «Input line is too long» error. I can’t even execute any command included in the updated data bats manually in that cmd window. But if I close the cmd window and open a new one I can execute the commands without errors.

What’s the solution to this?

user's user avatar

user

4,3515 gold badges17 silver badges34 bronze badges

asked May 29, 2013 at 18:57

Carlos Grossi's user avatar

10

I have had this same problem when executing a build script in a cmd window. After about 13 times I got that same error. The build script had to make sure that vcvarsall.bat was run so it executed vcvarsall.bat every time.

vcvarsall.bat is not smart enough to only add things to the path if they are not already there so a bunch of duplicate entries were added.

My solution was to add an if defined check on an environment variable which I know is set by vcvarsall.bat…

if not defined DevEnvDir (
    call vcvarsall.bat
)

Check your path environment variable after each run and see if it is growing. If it is and there are duplicates, you will need to be smart about adding stuff to the path. There are several ways to be smart about it.

answered Nov 12, 2013 at 12:54

Okkenator's user avatar

OkkenatorOkkenator

1,6141 gold badge15 silver badges27 bronze badges

2

I happened upon this error just now for the first time after running the same set of commands (stop / start an application server) a number of times.

The error stopped when I opened up a new command line and tried the commands from the new command line console.

answered Nov 11, 2013 at 22:42

Jim Bethancourt's user avatar

0

This usually happens due to long path. I have resolved this issue by replacing base path of Kafka from C:Program Files<Kafka_path> to C:Kafka

answered Dec 27, 2020 at 14:43

Amol Patil's user avatar

Amol PatilAmol Patil

1772 silver badges11 bronze badges

1

I realize this is pretty old, but the other issue I ran into was having a " at the end of the command I was calling. I was attempting to call:

"C:Program Files (x86)Microsoft Visual Studio 12.0Common7Tools..IDECommonExtensionsMicrosoftTestWindowvstest.console.exe""

If you notice, I have two " at the end of the line. This was causing my issues (Notepad++ included it when I typed the quotes). Removed that, all good. Again, may not be your issue, but if anyone else comes seeking info and nothing else works, check this. :)

Cà phê đen's user avatar

Cà phê đen

1,8372 gold badges20 silver badges19 bronze badges

answered Nov 9, 2015 at 16:37

Chris's user avatar

ChrisChris

7111 gold badge7 silver badges18 bronze badges

1

There is a Windows knowledge base article on this subject. They don’t mention Windows 2008 server, but they did mention the difference in size between other versions of the OS, so it wouldn’t be surprising is there was a difference between 2003 and 2008.

As for solutions to the problem, some of their suggestions include:

  • Modify programs that require long command lines so that they use a file that contains the parameter information, and then include the name of the file in the command line.
  • Use shorter names for folders and files.
  • Reduce the depth of folder trees.

You can read the whole article if you want to see what else they have to say, but those were the suggestions that looked most likely to apply to you.

answered May 29, 2013 at 21:19

James Holderness's user avatar

James HoldernessJames Holderness

22.6k2 gold badges38 silver badges52 bronze badges

Rename the folder name to Kafka . It worked fine for me . Close the cmd and start it again . That will definitely work fine !!

Before :
enter image description here

After :
enter image description here

zhangxaochen's user avatar

zhangxaochen

32k15 gold badges76 silver badges106 bronze badges

answered Aug 5, 2021 at 8:37

Rishi Pollai's user avatar

1

I have the same issue to start zookeeper under window. The root cause is due to file path is too long. I relocated the kafka folder to shorter file path. For example : c:/kafka_2.13-2.6.0. then cd to bin/windows and start zookeeper. It works.

answered Jul 5, 2021 at 15:48

Sriharsha g.r.v's user avatar

when it’s necessary to call vcvarscall.bat multiple times, then:

setlocal
vcvarsall.bat x64
cl xxx.cpp
endlocal

setlocal
vcvarsall.bat x86
cl xxx.cpp
endlocal

answered Mar 29, 2021 at 9:52

BgBgBgBsBsBs's user avatar

It can also happen if the spaces in your file (ansi character 0x20) are really non-breaking spaces (I had 0xA0, but yours may vary). This can happen if you copy/pasted from the internet to a UTF-8 aware editor.

The result depends on the current codepage of windows, your editor and such. To fix:

  1. Use an hexadecimal editor
  2. Look at how spaces are represented
  3. Search and replace your representation

I used HxD to search and replace 0xA0 to 0x20.

answered Jun 1, 2017 at 15:52

ixe013's user avatar

ixe013ixe013

9,2563 gold badges49 silver badges75 bronze badges

using CALL several times to run another batch that sets env will increment the value of the var you are setting,hence the error at some point

call set path=somepath;%path%

running the above command in cmd for many times will produce the error

answered Dec 11, 2019 at 14:48

Hossam Houssein's user avatar

0

I ran into this also.

I was trying to run vcvars.bat as others here seem to be trying.

The underlying problem for me seemed to be that my PATH variable was polluted with repeats of an already pretty lengthy path. Fixing up my path seemed to fix the issue for me (in a new terminal, of course). Note that this fix isn’t specific to vcvars.bat or anything Visual Studio related.

I’m curious if Cookie Butter’s solution is a workaround and the underlying problem is the same.

answered May 15, 2019 at 13:16

sg_man's user avatar

sg_mansg_man

7031 gold badge6 silver badges13 bronze badges

1

This happens due to long path or long name of directory . I have resolved this by renaming the folder name by removing the version from it and placing the folder to c: directory.
Example —
from = C:UsersrsolaDownloadskafka_2.13-3.3.1
to = C:kafka

answered Oct 10, 2022 at 7:10

Suvigya Saxena's user avatar

Понравилась статья? Поделить с друзьями:
  • Windows cannot connect to the printer no printers were found
  • Windows cmd show files in directory
  • Windows cannot connect to the printer access is denied
  • Windows cannot connect to the printer 0x0000011b
  • Windows cannot connect to the printer 0x00000002