1

cmdのStatコマンド:

start.bat -arg1 -ar g2 -arg3

2番目の引数を取得するにはどうすればよいですか?文字列'arg2'には1つのスペースが含まれています。

batファイルからargs(スペース文字を含む場合があります)を取得する必要があります。その後、javaファイルでそれらを処理します。

誰かが私に解決策を教えてもらえますか?どうもありがとう。

4

3 に答える 3

3

(DOS/Windows) コマンド ラインでは、スペースを含む引数は常に引用符で囲む必要があります。例えば

start.bat -arg1 "-ar g2" -arg3

すべての引数を引用符で囲んでも問題はありませんが、その場合はバッチ スクリプトで引用符を削除する必要があります (以下のコード サンプルを参照)。

これは私が覚えている限りずっとそうでした (Windows 3.1 DOS より前の時代)。長いファイル名 (スペースを含む可能性がある) が実装されると、これはより一般的になりました。例えば

C:\Users\adam>copy "My Documents" "My Backup Files"

(引用符なしでも試してみてください)。

これは CMD のやり方であり、CMD から呼び出されたプログラムはこれを正しく理解します。

コード サンプル (実際に何が返されるかを確認するために、デバッグに役立つ場合があります。引数のリストを指定してバッチ ファイルまたは Java クラスを実行し、いろいろ試してみてください。)

バッチ スクリプト( ~ (チルダ) 文字が重要で、周囲の引用符が削除されます):

    @エコーオフ
    FOR %%a IN (%*) DO echo [%%~a]

Java (周囲の引用符は自動的に削除されます)

    パブリック クラス TestArg {
        public static void main(String[] args) {
            for (文字列 a : args) {
                System.out.println("[" + a + "]");
            }
        }
    }

于 2013-02-27T08:26:24.177 に答える
0

以下のようなものを使用できます...概念コードの証明だけで、残りは自分で行う必要があります...または、私のようにJavaプログラミングに関する本を購入してください。

public static void main(String argv[])
    {
    String argument1 = "";
    String argument2 = "";
    String argument2value = "";
    String argument3 = "";
    for(int c=0;c<argv.length;c++)
        {
        if(argv[c].indexOf("-")==0)
            {
            if(argument1.length() == 0)
                {
                argument1 = argv[c].substring(1,argv[c].length());
                }
            if(argument2.length() == 0)
                {
                argument2 = argv[c].substring(1,argv[c].length());
                }  
            }
        else
            {
            if(argument2.length() != 0)
                {
                argument2value = argument2value + argv[c]
                }
            }
        }
    }
于 2013-02-27T08:29:21.257 に答える
0

| で文字列を分割することはできませんか?文字、そして値をトリムします (左 + 右) ? これにより、その間のスペースが保持されます。

于 2013-02-27T08:25:39.400 に答える