cmdのStatコマンド:
start.bat -arg1 -ar g2 -arg3
2番目の引数を取得するにはどうすればよいですか?文字列'arg2'には1つのスペースが含まれています。
batファイルからargs(スペース文字を含む場合があります)を取得する必要があります。その後、javaファイルでそれらを処理します。
誰かが私に解決策を教えてもらえますか?どうもありがとう。
cmdのStatコマンド:
start.bat -arg1 -ar g2 -arg3
2番目の引数を取得するにはどうすればよいですか?文字列'arg2'には1つのスペースが含まれています。
batファイルからargs(スペース文字を含む場合があります)を取得する必要があります。その後、javaファイルでそれらを処理します。
誰かが私に解決策を教えてもらえますか?どうもありがとう。
(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 + "]"); } } }
以下のようなものを使用できます...概念コードの証明だけで、残りは自分で行う必要があります...または、私のように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]
}
}
}
}
| で文字列を分割することはできませんか?文字、そして値をトリムします (左 + 右) ? これにより、その間のスペースが保持されます。