2012-05-21 5 views
6

Piszę plik wsadowy dla systemu Windows i użyj polecenia 7z (7-Zip). Umieściłem lokalizację tego w PATH. Czy istnieje stosunkowo łatwy sposób sprawdzenia, czy polecenie jest dostępne?Sprawdź, czy polecenie jest dostępne w pliku wsadowym

+0

Nie wykonywać. Najlepszym sposobem IMO byłoby: http://stackoverflow.com/a/27014081/1724702 –

Odpowiedz

1

Próba wykonania 7z.exe zwróci %errorlevel% z 9009, jeśli polecenie nie zostanie znalezione. Możesz to sprawdzić.

7z.exe 
if %errorlevel%==9009 echo Command Not Found 
+0

Lepszą metodą byłoby '7z.exe> ​​nul 2> & 1 | echo Polecenie nie odnaleziono ", tak myślę. – Joey

+0

Najlepszym sposobem IMO byłoby: http://stackoverflow.com/a/27014081/1724702 –

-1

Tak, otwórz okno poleceń i wpisz "7z" (zakładam, że jest to nazwa pliku wykonywalnego). Jeśli pojawi się błąd informujący, że polecenie lub operacja nie zostały rozpoznane, to wiesz, że instrukcja ścieżki ma gdzieś problem, w przeciwnym razie nie.

1

Tak,

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

Nie będzie działać z cytowanymi ścieżkami zawierającymi spacje. – Joey

+0

Dzięki, dlaczego mówisz 'set found ='? – rynd

+0

@Joey jest łatwa do rozwiązania. Użyj podwójnych cudzysłowów. Jednak to nie zadziała, jeśli rozszerzenie polecenia (exe, bat) nie zostanie określone podczas zaakceptowanego rozwiązania. – khattam

16

bym nie polecają wykonaniem polecenia, aby sprawdzić, czy jest ona dostępna do użytku (powiedzmy, dostępny w PATH zmiennej środowiskowej). Więc myślę, że najlepszym rozwiązaniem byłoby, używając polecenia where:

where 7z.exe >nul 2>nul 
if %errorlevel%==1 (
    @echo 7z.exe not found in path. 
    [do something about it] 
) 

>nul i 2>nul są opcjonalne; Używane tutaj, aby zapobiec wyświetlaniu standardowego wyjścia i standardowego wyjścia błędu generowanego przez polecenie where.

Aktualizacja: Dlaczego nie chcieć wykonać:

  1. Może nie naprawdę nie wie, co czyni program
  2. Program może mieć skutki uboczne - może zrobić coś, wiesz, ale nie chcą - takich jak pliki Usuń, odtworzenie pamięci podręcznej, itp
  3. Program może być zasobochłonne/wolno

Problem polega na ustaleniu, czy program jest dostępny, a więc należy po prostu sprawdzić to samo.

+1

Obstawianie warunku "IF": 'IF NOT ERRORLEVEL 0'. Zobacz ['IF'] (http://ss64.com/nt/if.html). – jpmc26

+1

Dlaczego nie zaleca się jej wykonywania? Czy to ogólnie, czy w tym konkretnym przypadku? – quimnuss

+2

Wiele powodów, aby nie wykonywać: efektów ubocznych, możesz nie wiedzieć, co program robi, program może wymagać dużej ilości zasobów/spowolnić itd. –