Ich schreibe ein Fledermaus-Skript, in dem ich ein Programm aufrufe (z. B. javac). Der Einfachheit halber möchte ich überprüfen, ob der Befehl vorhanden ist, bevor ich ihn ausführe. dh wenn der Befehl in PATH existiert.
Zum Beispiel,
if (my_command.exe is a recognized command) then (
my_command.exe my_args
) else (
REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file."
REM Do not run my_command.exe
)
Was ist der beste Weg, um dies in Windows zu tun?
windows
command-line
batch
script
user46097
quelle
quelle
Antworten:
quelle
>nul 2>nul
hinter dem hinzumycommand
.Der folgende Code sollte immer sauber und ohne Müllausgabe ausgeführt werden.
Ausgabe:
Der gleiche Code wie bei einem Einzeiler:
Ausgabe:
Beachten Sie, dass die Reihenfolge von
&&
und||
wichtig zu sein scheint. Außerdem muss der Befehl, auf dessen Existenz Sie testen, mit einer Fehlerebene <= 0 zurückgegeben werden, damit dies funktioniert. Hoffentlich hat der Befehl /? oder --help Argumente oder, wie bei Java, ein Versionsinformationsbefehl.quelle
Der einfachste Weg ist, einfach den Befehl auszuführen, aber das hat natürlich andere Probleme, da Sie vielleicht nicht möchten, dass ein zufälliger Prozess gestartet wird.
ist eine Alternative, die nach dem Programm in den Pfaden sucht, die von der
%PATH%
Umgebungsvariablen aufgelistet werden . Es ist im Wesentlichen eine reine Batch-Version vonwhich(1)
. Es kann besser gemacht werden, aber im Wesentlichen ist es das.quelle
Für meine Situation. Der absolut einfachste Weg ist die Verwendung von || oder && Operator.
oder
quelle
Einige Verfeinerungen zur Version unten. Testen Sie, ob der Befehl vorhanden ist, und unterdrücken Sie nicht benötigte Ausgaben.
quelle
WHERE \Windows\System32\cmd.exe
=>INFO: Could not find files for the given pattern(s).
Wenn es in Ordnung ist, zusätzliche Tools zu installieren, finden Sie
where
in den Resource Kits einen Befehl. siehe Windows-Äquivalent von whereis? .Andernfalls ist es für Windows-Versionen, die nicht zu alt sind, in reiner Form möglich
cmd
, wie in DOS Executable Lookup (außer PATH) erwähnt .quelle
Ich weiß, dass dies nicht ganz das ist, wonach Sie suchen, aber mit einer geringfügigen Änderung der Logik sollte es das erreichen, was Sie benötigen.
Jeder ausgeführte Befehl hat einen Rückgabecode (auch bekannt als Errorlevel). Wenn der Rückgabecode 0 (Null) ist, wurde der Befehl erfolgreich ausgeführt. Wenn der Rückgabecode größer als 0 ist, ist ein Fehler aufgetreten.
Sehen Sie hier für weitere Details.
So etwas wie -
quelle
Während all diese Möglichkeiten funktionieren könnten, warum nicht die eingebauten Möglichkeiten?
Führen Sie "if /?" in der Befehlszeile für Details
quelle
PATH
.