Ограничение командной строки (Cmd. exe) командной строки

В этой статье рассматривается ограничение длины строк, используемых из командной строки в командной строке (Cmd.exe). Он также предоставляет методы, которые можно использовать для обхода этого ограничения.

Область применения: Windows Server 2012 R2, Windows Server 2008 R2 с пакетом обновления 1 (SP1), Windows 7 с пакетом обновления 1 (SP1)
Исходный номер базы знаний: 830473

Дополнительная информация

Максимальная длина строки, которую можно использовать в командной строке, составляет 8191 символ.

Это ограничение применяется к:

  • командная строка
  • отдельные переменные среды, наследуемые другими процессами, например переменная PATH
  • расширение всех переменных среды

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

Примеры

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

  • В командной строке общая длина следующей командной строки не может содержать более 8191 символа:

    cmd.exe /k ExecutableFile.exe parameter1, parameter2... parameterN
    
  • В пакетном файле общая длина следующей командной строки не может содержать более 8191 символов:

    cmd.exe /k ExecutableFile.exe parameter1, parameter2... parameterN
    

    Это ограничение применяется к командным строкам, которые содержатся в пакетных файлах при использовании командной строки для запуска пакетного файла.

  • В командной строке общая длина EnvironmentVariable1 после развертывания EnvironmentVariable2EnvironmentVariable3 не может содержать более 8191 символа:

    c:> set EnvironmentVariable1 = EnvironmentVariable2 EnvironmentVariable3
    
  • В пакетном файле общая длина следующей командной строки после развертывания параметров не может содержать более 8191 символа:

    ExecutableFile.exe parameter1 parameter2
    
  • Несмотря на то, что ограничение Win32 для переменных среды составляет 32 767 символов, командная строка игнорирует все переменные среды, унаследованные от родительского процесса и превышающие собственные ограничения в 8191 символ (в соответствии с операционной системой). Дополнительные сведения о функции см. в SetEnvironmentVariable разделе Функция SetEnvironmentVariableA.

Обход ограничения

Чтобы обойти ограничение, используйте один или несколько из следующих методов в соответствии с вашей ситуацией:

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

    Например, вместо использования ExecutableFile.exe Parameter1 Parameter2... ParameterN командной строки в пакетном файле измените программу на использование командной строки, аналогичной следующей командной строке, где ParameterFile — это файл, содержащий необходимые параметры (parameter1 parameter2... ParameterN):

    ExecutableFile.exe c:\temp\ParameterFile.txt
    
  • Измените программы, использующие большие переменные среды, чтобы переменные среды содержали менее 8191 символа.

    Например, если переменная среды PATH содержит более 8191 символов, используйте один или несколько из следующих методов, чтобы уменьшить количество символов:

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