понедельник, 19 мая 2014 г.

Аналог which в CMD.EXE

В *NIX-подобных системах есть очень удобная штука поиска программ с полным путем в PATH - which. 

Как это ни забавно, нечто подобное присутствует и в Windows:

C:\Windows\System32\where.exe

В универсальных кроссплатформенных скриптах бывает весьма удобно присвоить имена с полными путями внешних утилит переменным и использовать именно их. С тем, чтобы не вбивать их хардкодом.

В юниксах это делается тривиально:

ECHO=`which echo`

А теперь, внимание - вопрос.

Как то же самое проделать в CMD? ;)

Да, я знаю, гугл приводит в кучу намеков. Но где работоспособное решение? ;)

Вот оно:

rem Check dig installed
for /f "delims=" %%a in ('where dig') do @set dig=%%a
if /I "%dig%"=="" echo Dig not found. If installed, add path to PATH environment variable. & exit 1
echo Dig found: %dig%

echo Warming up cache by MRU domains...
rem %dig% -f my_domains 1>nul 2>nul
rem echo Done.


Мы ищем программу (в нашем случае dig) в путях PATH, если находим - то присваиваем ее одноименной переменной, которую затем и вызываем.

Скажете, нафиг так сложно?

Первое. Попробуйте получить то же самое иным путем. ;)

Второе. А если программа стоит в директории с пробелом, например, C:\Program Files (x86)? ;)

Так надо. :) Это универсально и это - работает. В отличие от всех прочих частичных решений.