記事検索

検索ワードを入力してください。
Sky Tech Blog
コマンド ラインの​上限

コマンド ラインの​上限

batファイルやPowerShellスクリプトで長いパラメータを渡す際、その上限文字数はいくつなのでしょうか?本記事では、Microsoft Learnの公式ドキュメントを基に、コマンドプロンプト(8191文字)とCreateProcessW関数(32,767文字)の上限について、batファイル、ps1ファイル、そしてコマンドプロンプトからの直接実行という3つのパターンで実際に検証します。C++で作成した検証用プログラムを使い、それぞれの環境で渡せるパラメータの最大長と、上限を超えた場合のエラーメッセージを具体的に紹介します。

batファイルから実行するプログラムに、長いパラメータ文字列を渡す必要があったので、その上限について調べてみました。

Microsoft Learn では、コマンド プロンプト について、以下のように記載されています。

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

(出典:コマンド プロンプトの行文字列の制限 - Windows Client | Microsoft Learn

また、コマンド ライン については、以下のように記載されています。

実行するコマンド ライン。この文字列の最大長は 32,767 文字 (Unicode 終端の null 文字を含む) です。

(出典:CreateProcessW 関数 (processthreadsapi.h) - Win32 apps | Microsoft Learn)

実際の挙動はどうなっているのか確かめてみました。
※いずれも、Windows 11 25H2 での結果です。

検証用プログラム

パラメータをファイルへ出力するだけの、以下のようなプログラム(C++)を使って確認しました。

output_param.exe
---
#include 

int main(int argc, char* argv[]) {
    if (argc > 1) {
        std::ofstream ofs("output_param.txt");
        ofs << argv[1];
    }
    return 0;
}

batファイル

call_output_param.bat
---
@echo off
output_param 01234567890abcdefg・・・

実行ファイルパス(output_param )も含めて、32,765 文字 までいけました。
※おそらく、Unicode 終端の null 文字 で 2文字 必要なのだと思います。
※output_param.txt には 実行ファイルパス(output_param :13文字)を除いた、32,752 文字 出力できました。

文字数なので、パラメータを全角文字にしても、32,765 文字 までいけます。

output_param 0123456789・・・

32,765 文字 を超えると、以下のようなエラーとなります。

指定されたプログラムは実行できません。

ps1ファイル

call_output_param.ps1
---
.\output_param 01234567890abcdefg・・・

PowerShell では、実行ファイルの絶対パスが補完(今回は、d:\tmp\output_param.exe)されるようで、それも含めて 32,765 文字 までいけました。
※output_param.txt には 32,740 文字 出力できました。

32,765 文字 を超えると、以下のようなエラーとなります。

プログラム 'output_param.exe' の実行に失敗しました: ファイル名または拡張子が長すぎます。

コマンド プロンプト​(cmd.exe)

コマンド プロンプト から以下のようなコマンドを入力して直接実行する場合です。

> output_param 01234567890abcdefg・・・

実行ファイルパス(output_param )も含めて、8,190 文字 までいけました。
※output_param.txt には 8,177 文字 出力できました。

8,190 文字 を超えると、以下のようなエラーとなります。

入力行が長すぎます。

まとめ

それぞれ Microsoft Learn に記載されていた通りの挙動になることを確認できました。
基本的には、実行ファイルパスを含めて 32,765 文字 までいけるようです。
ただし、コマンド プロンプト(cmd.exe) を 利用する場合などは 8,190 文字 になります。

パラメータが長くなってしまう場合、その上限には気を付けておきたいと思います。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム