コマンド プロンプト (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
EnvironmentVariable3
した後のEnvironmentVariable1
合計の長さが 8191 文字を超えることはできません。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 環境変数で必要なフォルダーが少なくなるように、ファイルを少ないフォルダーに格納します。
- .dll ファイルを検索するための PATH の依存関係を減らすために使用できる可能性のあるメソッドを調査します。