Cygwin内からcmd.exeを実行する


16

作業中のメインシェルにCygwinを使用したいのですが、私のグループはいくつかのプロセスにバッチファイルを使用しています。cmd /c batch.batCygwinからバッチファイルを実行するだけでよいと言われました。これは一部のケースで機能し、他のケースでは機能しません。これを行うと、バッチファイルの1つが完全に失敗しますが、cmdシェルから実行すると正常に動作します。

私が気づいたもう1つの奇妙な点はcmd /?、Cygwinから実行した場合、出力が得られないことです。これをcmdシェルから実行すると、標準のヘルプが表示されます。実行cmd /c cmd /?しても出力はありません。cmdCygwinから実行すると、cmdシェルが表示され、実行するcmd /?と、ヘルプテキストが表示されますが、改ページはありません。

次に試すことは、Start-> Runに移動して「cmd」と入力したかのように、実際にcmdを個別のウィンドウ内で実際に起動する方法を見つけることだと思います。Cygwin内からこれを行う方法はありますか?

回答:


8

/?bashによってパターンとして扱われます。疑問符は1文字に収まるため、Cygwinルートに1文字のファイルまたはディレクトリがある場合、パターンはそれらに置き換えられます。echo /?それが起こっているかどうかを表示します。バックスラッシュで疑問符をエスケープできます:/\?。または、引数全体を引用します'/?'

cygstart c:/windows/system32/cmd cmd.exeを独自のウィンドウで起動します。


私のwin xp sp2 latopでは、次のコードスニペットが機能します:cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao

14

Cygwinシェルから直接バッチファイルを実行できますcmd。中間呼び出しも必要ありません。バッチファイルに引数が必要な場合は、Windows形式で引用符で囲む必要があります。実行する方が簡単かもしれませんcmd /c 'foo.bat "quoted arguments"'

どの端末でシェルを実行しているのかはわかりません。バッチファイル自体はそれを気にしませんが、バッチファイルから実行されるコマンドはそうするかもしれません。CygwinターミナルエミュレータはWindowsコンソールをエミュレートしないため、Cygwinプログラムおよびstdio専用プログラムには適していますが、Windowsコンソールプログラムには適していません。

通常、CygwinターミナルでCygwinシェル(rxvtやminttyなど)を実行する場合、別のWindowsコンソールでトラブルバッチファイルを実行できますstart foo.bat。Windowsコンソールのより優れた代替としてConsole2を実行し、Console2で Windowsコンソールアプリケーションを実行し、Cygwinターミナル(またはConsole2でも)でCygwinアプリケーションを実行することができます。

cmd /?は赤いニシンです。Cygwinのルートディレクトリにはおそらく1文字の長さのディレクトリがあるため、シェルは展開して、出力を生成しないスイッチで/?実行さcmdれます。


シェル変数をcmd引数に貼り付ける必要があったので、以下がBashおよびcmdパーサーを回避できると考えました:u = 'DOMAIN \ ACC' p = 'X <12' r = '{Baz 3.1 5-x-(TTT )} 'd = $' \ "'cmd / c foo.bat -u%d %% u %% d%-p%d %% p %% d%-fooBar%d %% r %% d%- fooBAR true
うなぎghEEz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.