Piszę skrypt nietoperza, w którym wywołuję program (na przykład javac). Dla uproszczenia chcę sprawdzić, czy polecenie istnieje przed jego uruchomieniem. tzn. jeśli polecenie istnieje w zmiennej PATH.
Na przykład,
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
)
Jak najlepiej to zrobić w systemie Windows?
windows
command-line
batch
script
użytkownik46097
źródło
źródło
Odpowiedzi:
źródło
>nul 2>nul
zamycommand
.Poniższy kod powinien zawsze być wykonywany czysto, bez żadnych śmieci.
Wynik:
Ten sam kod jak w jednej linijce:
Wynik:
Zauważ, że kolejność
&&
i||
wydaje się mieć znaczenie. Aby polecenie zadziałało, polecenie, którego istnienie testujesz, musi powrócić z poziomem błędu <= 0. Mam nadzieję, że polecenie ma /? lub --help argumenty lub, podobnie jak w Javie, polecenie informacji o wersji.źródło
Najłatwiej jest po prostu uruchomić polecenie, ale ma to oczywiście inne problemy, ponieważ być może nie chcesz, aby proces był uruchamiany losowo.
jest alternatywą, która wyszukuje program na ścieżkach wymienionych przez
%PATH%
zmienną środowiskową. Jest to w zasadzie czysta wersja partiiwhich(1)
. Można to ulepszyć, ale w gruncie rzeczy to jest to.źródło
Do mojej sytuacji. Absolutnie najprostszym sposobem jest użycie || lub operator &&.
lub
źródło
Niektóre udoskonalenia wersji poniżej. Sprawdź, czy polecenie to istnieje i pomiń niepotrzebne dane wyjściowe.
źródło
WHERE \Windows\System32\cmd.exe
=>INFO: Could not find files for the given pattern(s).
Jeśli wymaganie instalacji dodatkowych narzędzi jest w porządku,
where
w zestawach zasobów znajduje się polecenie; zobaczyć Windows odpowiednik whereis? .W przeciwnym razie dla wersji systemu Windows, które nie są zbyt stare, można to zrobić w czystej postaci
cmd
, jak wspomniano w wyszukiwaniu wykonywalnym Dos, z wyjątkiem PATH .źródło
Wiem, że nie do końca tego szukasz, ale z niewielką zmianą logiki powinno ono osiągnąć to, czego potrzebujesz.
Każde uruchamiane polecenie ma kod powrotu (inaczej poziom błędu), jeśli kod powrotu to 0 (zero), polecenie zostało wykonane pomyślnie, jeśli kod powrotu jest większy niż 0, coś poszło nie tak.
Zobacz tutaj po więcej szczegółów.
Coś jak -
źródło
Chociaż wszystkie te sposoby mogą działać, dlaczego nie wbudowane?
Uruchom „if /?” w wierszu polecenia, aby uzyskać szczegółowe informacje
źródło
PATH
.