Ich schreibe eine Batch-Datei für Windows und verwenden Sie den Befehl 7z
(7-Zip). Ich habe den Standort in den Pfad eingefügt. Gibt es eine relativ einfache Möglichkeit zu überprüfen, ob der Befehl verfügbar ist?Überprüfen Sie, ob der Befehl in Batch-Datei verfügbar ist
Antwort
Ein Versuch, 7z.exe
auszuführen, wird einen %errorlevel%
von 9009 zurückgeben, wenn der Befehl nicht gefunden wird. Das kannst du überprüfen.
7z.exe
if %errorlevel%==9009 echo Command Not Found
Eine schönere Art wäre '7z.exe> nul 2> & 1 | Echo Command nicht gefunden ", denke ich. – Joey
Der beste Weg, IMO wäre: http://stackoverflow.com/a/27014081/1724702 –
Ja, öffnen Sie ein Befehlsfenster und geben Sie "7z" ein (ich nehme an, das ist der Name der ausführbaren Datei). Wenn Sie einen Fehler erhalten, der besagt, dass der Befehl oder die Operation nicht erkannt wird, wissen Sie, dass die path-Anweisung irgendwo ein Problem enthält, anderenfalls nicht.
Yup,
@echo off
set found=
set program=7z.exe
for %%i in (%path%) do if exist %%i\%program% set found=%%i
echo "%found%"
Dies funktioniert nicht mit in Anführungszeichen gesetzten Pfaden, die Leerzeichen enthalten. – Joey
Danke, warum sagst du 'set found ='? – rynd
@Joey gibt es eine einfache Lösung dafür. Verwenden Sie doppelte Anführungszeichen. Dies funktioniert jedoch nicht, wenn die Erweiterung des Befehls (exe, bat) nicht angegeben wird, während die akzeptierte Lösung dies tut. – khattam
Ich würde nicht empfehlen die Ausführung des Befehls zu prüfen, ob es für die Verwendung (beispielsweise in PATH
Umgebungsvariable) zur Verfügung steht. Also ich denke, der beste Ansatz würde die where
Befehl verwenden:
where 7z.exe >nul 2>nul
if %errorlevel%==1 (
@echo 7z.exe not found in path.
[do something about it]
)
Die >nul
und 2>nul
sind optional; wird hier verwendet, um die Anzeige der Standardausgabe und der Standardfehlerausgabe zu verhindern, die durch den Befehl where
generiert werden.
aktualisieren: Warum Sie nicht ausführen möchten:
- Sie werden vielleicht nicht wirklich nicht wissen, was das Programm macht
- Das Programm könnte Nebenwirkungen haben - es ist etwas tun könnte, dass Sie wissen aber wollen nicht - wie löschen von Dateien, Cache neu erstellen usw.
- Das Programm ressourcenintensiv sein könnte/langsam
Das Problem besteht darin, festzustellen, ob das Programm verfügbar ist oder nicht, und Sie sollten es einfach überprüfen.
Wette 'IF' Bedingung:' IF NOT ERRORLEVEL 0'. Siehe [IF] (http://ss64.com/nt/if.html). – jpmc26
Warum würden Sie die Ausführung nicht empfehlen? Ist es im Allgemeinen oder in diesem speziellen Fall? – quimnuss
Viele Gründe, die nicht ausgeführt werden müssen: Nebeneffekte, Sie wissen vielleicht nicht, was das Programm macht, das Programm könnte ressourcenintensiv/langsam sein usw. –
Nicht ausführen. Der beste Weg IMO wäre: http://Stackoverflow.com/a/27014081/1724702 –