2012-05-21 21 views
6

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

+0

Nicht ausführen. Der beste Weg IMO wäre: http://Stackoverflow.com/a/27014081/1724702 –

Antwort

1

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 
+0

Eine schönere Art wäre '7z.exe> ​​nul 2> & 1 | Echo Command nicht gefunden ", denke ich. – Joey

+0

Der beste Weg, IMO wäre: http://stackoverflow.com/a/27014081/1724702 –

-1

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.

1

Yup,

@echo off 
set found= 
set program=7z.exe 
for %%i in (%path%) do if exist %%i\%program% set found=%%i 
echo "%found%" 
+0

Dies funktioniert nicht mit in Anführungszeichen gesetzten Pfaden, die Leerzeichen enthalten. – Joey

+0

Danke, warum sagst du 'set found ='? – rynd

+0

@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

16

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:

  1. Sie werden vielleicht nicht wirklich nicht wissen, was das Programm macht
  2. 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.
  3. 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.

+1

Wette 'IF' Bedingung:' IF NOT ERRORLEVEL 0'. Siehe [IF] (http://ss64.com/nt/if.html). – jpmc26

+1

Warum würden Sie die Ausführung nicht empfehlen? Ist es im Allgemeinen oder in diesem speziellen Fall? – quimnuss

+2

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. –

Verwandte Themen