コマンド プロンプト (Cmd. exe) コマンド ライン文字列の制限

この記事では、コマンド プロンプト (Cmd.exe) のコマンド プロンプトから使用する文字列の長さの制限について説明します。 また、この制限を回避するために使用できるメソッドも提供されます。

適用対象: Windows Server 2012 R2、Windows Server 2008 R2 Service Pack 1、Windows 7 Service Pack 1
元の KB 番号: 830473

詳細

コマンド プロンプトで使用できる文字列の最大長は 8191 文字です。

この制限は、次の場合に適用されます。

  • コマンド ライン
  • PATH 変数など、他のプロセスによって継承される個々の環境変数
  • すべての環境変数の展開

コマンド プロンプトを使用してバッチ ファイルを実行する場合、この制限はバッチ ファイル処理にも適用されます。

次の例は、コマンド プロンプトで実行するコマンドと、バッチ ファイルで使用するコマンドにこの制限がどのように適用されるかを示しています。

  • コマンド プロンプトでは、次のコマンド ラインの合計長に 8191 文字を超えることはできません。

    cmd.exe /k ExecutableFile.exe parameter1, parameter2... parameterN
    
  • バッチ ファイルでは、次のコマンド ラインの合計長に 8191 文字を超えることはできません。

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

    この制限は、コマンド プロンプトを使用してバッチ ファイルを実行するときに、バッチ ファイルに含まれるコマンド ラインに適用されます。

  • コマンド プロンプトで、 を展開EnvironmentVariable2した後のEnvironmentVariable1の長さの合計で、EnvironmentVariable38191 文字を超えることはできません。

    c:> set EnvironmentVariable1 = EnvironmentVariable2 EnvironmentVariable3
    
  • バッチ ファイルでは、パラメーターを展開した後の次のコマンド ラインの合計長に 8191 文字を超えることはできません。

    ExecutableFile.exe parameter1 parameter2
    
  • 環境変数の Win32 の制限は 32,767 文字ですが、コマンド プロンプトは、親プロセスから継承され、(オペレーティング システムに応じて) 8191 文字の独自の制限よりも長い環境変数を無視します。 関数の SetEnvironmentVariable 詳細については、「 SetEnvironmentVariableA 関数」を参照してください。

制限事項を回避する方法

この制限を回避するには、状況に応じて、次の 1 つ以上の方法を使用します。

  • 長いコマンド ラインを必要とするプログラムを、パラメーター情報を含むファイルを使用するように変更し、コマンド ラインにファイルの名前を含めます。

    たとえば、バッチ ファイルでコマンド ラインを ExecutableFile.exe Parameter1 Parameter2... ParameterN 使用する代わりに、次のコマンド ラインのようなコマンド ラインを使用するようにプログラムを変更します。 ParameterFile は、必要なパラメーター (parameter1 parameter2... を含むファイル)。ParameterN):

    ExecutableFile.exe c:\temp\ParameterFile.txt
    
  • 環境変数に 8191 文字未満が含まれるように、大きな環境変数を使用するプログラムを変更します。

    たとえば、PATH 環境変数に 8191 文字を超える文字が含まれている場合は、次の 1 つ以上のメソッドを使用して文字数を減らします。

    • フォルダーとファイルには短い名前を使用します。
    • フォルダー ツリーの深さを減らします。
    • PATH 環境変数で必要なフォルダー数を減らすように、ファイルをより少ないフォルダーに格納します。
    • ファイルを検索するための PATH の依存関係を減らすために使用できる方法 .dll 調査します。