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
Odpowiedz
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
Lepszą metodą byłoby '7z.exe> nul 2> & 1 | echo Polecenie nie odnaleziono ", tak myślę. – Joey
Najlepszym sposobem IMO byłoby: http://stackoverflow.com/a/27014081/1724702 –
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.
Tak,
@echo off
set found=
set program=7z.exe
for %%i in (%path%) do if exist %%i\%program% set found=%%i
echo "%found%"
Nie będzie działać z cytowanymi ścieżkami zawierającymi spacje. – Joey
Dzięki, dlaczego mówisz 'set found ='? – rynd
@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
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ć:
- Może nie naprawdę nie wie, co czyni program
- Program może mieć skutki uboczne - może zrobić coś, wiesz, ale nie chcą - takich jak pliki Usuń, odtworzenie pamięci podręcznej, itp
- 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.
Obstawianie warunku "IF": 'IF NOT ERRORLEVEL 0'. Zobacz ['IF'] (http://ss64.com/nt/if.html). – jpmc26
Dlaczego nie zaleca się jej wykonywania? Czy to ogólnie, czy w tym konkretnym przypadku? – quimnuss
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. –
Nie wykonywać. Najlepszym sposobem IMO byłoby: http://stackoverflow.com/a/27014081/1724702 –