Ausführen von cmd.exe aus Cygwin

16

Ich möchte Cygwin für meine Haupt-Shell bei der Arbeit verwenden, aber meine Gruppe verwendet Batch-Dateien für mehrere Prozesse. Mir wurde gesagt, dass ich nur cmd /c batch.batdie Batch-Datei von Cygwin ausführen kann . Dies funktioniert in einigen Fällen und nicht in anderen. Eine der Stapeldateien schlägt dabei vollständig fehl, funktioniert jedoch einwandfrei, wenn ich sie über die Cmd-Shell ausführe.

Eine weitere Kuriosität, die mir aufgefallen ist, ist, dass cmd /?ich keine Ausgabe bekomme , wenn ich von Cygwin aus laufe . Wenn Sie dies über die Cmd-Shell ausführen, erhalten Sie die Standardhilfe. Sogar das Tun cmd /c cmd /?liefert keine Ausgabe. Wenn ich cmdvon Cygwin aus starte, cmd /?erhalte ich die Cmd-Shell. Wenn ich dann starte, erhalte ich den Hilfetext , jedoch ohne Seitenumbrüche.

Ich denke, das nächste, was Sie versuchen müssen, ist, einen Weg zu finden, um cmd tatsächlich in einem eigenen Fenster zu starten, als ob Sie zu Start-> Ausführen gegangen wären und dann "cmd" eingegeben hätten. Gibt es eine Möglichkeit, dies aus Cygwin heraus zu tun?

Ryan Fox
quelle

Antworten:

8

/?wird von bash als Muster behandelt, wobei das Fragezeichen auf ein einzelnes Zeichen passt. Wenn Sie also Dateien oder Verzeichnisse mit einem Buchstaben in Ihrem Cygwin-Stammverzeichnis haben, wird das Muster durch diese ersetzt. echo /?zeigt dir, ob das passiert. Sie können die Fragezeichen mit einem Backslash: /\?. Oder geben Sie das ganze Argument: '/?'.

cygstart c:/windows/system32/cmd startet cmd.exe in einem eigenen Fenster.

ak2
quelle
Auf meinem Windows XP SP2 Latop würde dieser folgende Codeausschnitt funktionieren: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao
14

Sie können eine Batch-Datei direkt von einer Cygwin-Shell ausführen, Sie brauchen nicht einmal den Zwischenaufruf, um cmd. Wenn für die Batchdatei Argumente erforderlich sind, müssen diese in Windows-Anführungszeichen gesetzt werden. es könnte einfacher sein zu laufen cmd /c 'foo.bat "quoted arguments"'.

Sie sagen nicht, in welchem ​​Terminal Sie die Shell ausführen. Batch-Dateien an sich kümmern sich nicht darum, aber die Befehle, die von den Batch-Dateien ausgeführt werden, könnten. Cygwin-Terminalemulatoren emulieren keine Windows-Konsolen, daher eignen sie sich für Cygwin-Programme und nur für STDIO-Programme, nicht jedoch für Windows-Konsolenprogramme.

Wenn Cygwin-Shells normalerweise in einem Cygwin-Terminal ausgeführt werden (z. B. rxvt oder mintty), können Sie die Batch-Dateien für Probleme in einer separaten Windows-Konsole mit ausführen start foo.bat. Möglicherweise möchten Sie Console2 als besseren Ersatz für die Windows-Konsole ausführen und Windows-Konsolenanwendungen in Console2 und Cygwin-Anwendungen in einem Cygwin-Terminal (oder sogar in Console2) ausführen.

cmd /?ist ein roter Hering: Das Cygwin-Stammverzeichnis enthält vermutlich ein Zeichen lange Verzeichnisse, daher wird die Shell erweitert /?und cmdmit Switches ausgeführt, die zufällig keine Ausgabe produzieren.

Gilles 'SO - hör auf böse zu sein'
quelle
Ich musste Shell-Variablen in die cmd-Argumente einfügen, also stellte ich fest, dass das Folgende mit Bash- und cmd-Parsern umgehen kann: 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
aal ghEEz