なぜ
ProcessBuilder pb = new ProcessBuilder("cmd","/C","dir");
働くが
ProcessBuilder pb = new ProcessBuilder("cmd","dir");
ではない。
後者の場合、cmd は開始されますが、ディレクトリのリストは表示されません。これはなぜですか?
なぜ
ProcessBuilder pb = new ProcessBuilder("cmd","/C","dir");
働くが
ProcessBuilder pb = new ProcessBuilder("cmd","dir");
ではない。
後者の場合、cmd は開始されますが、ディレクトリのリストは表示されません。これはなぜですか?
これは通常の動作ですcmd.exe
-コマンドラインでも同じことが起こります:
C:\>cmd dir
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\>cmd /c dir
Volume in drive C is System
Volume Serial Number is ABCD-EF10
...
最初の呼び出しでは、新しい(対話型の)コマンドインタープリタープロセスを作成していますcmd.exe
。2番目の呼び出しでは、新しいコマンドインタープリタープロセスを作成し、指定されたコマンドを実行して終了するように指示します。
/C Carries out the command specified by string and then terminates
そのcmd.exe
ように機能するからです。コマンドウィンドウでこれを試してください:
cmd dir
と
cmd /C dir
help cmd
の解説もご覧ください。