Как .bat может проверить, существуют ли curl или wget - PullRequest
2 голосов
/ 01 октября 2010

В моем файле .bat, как я могу проверить, доступны ли в системе wget или curl, через какие-либо другие предыдущие установки, которые мог пройти пользователь.Возможна ли эта проверка, и могу ли я иметь в своем файле логику if then else, чтобы она реагировала иначе, как в обычном программировании.Я в основном хочу использовать wget или curl для загрузки файла.

If (wget is available)
   do something
else if (curl is available)
   do something else
else 
   tell the user they are out of luck

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Если вы знаете путь, по которому вы ожидаете найти EXE, это довольно просто:

IF EXIST C:\Windows\wget.exe ( *** do something with it ***)

... конечно, вы можете сделать IF NOT EXIST с рекламой, чтобы скопировать ее, илииспользуйте оператор ELSE.

В противном случае, если вы не знаете, где вы можете найти файл, вы можете найти его с помощью чего-то вроде этого (оригинальный источник найден здесь ):

@echo off
SETLOCAL
(set WF=)
(set TARGET=wget.exe)

:: Look for file in the current directory

  for %%a in ("" %PATHEXT:;= %) do (
     if not defined WF if exist "%TARGET%%%~a" set WF=%CD%\%TARGET%%%~a)

:: Look for file in the PATH

  for %%a in ("" %PATHEXT:;= %) do (
     if not defined WF for %%g in ("%TARGET%%%~a") do (
        if exist "%%~$PATH:g" set WF=%%~$PATH:g))

:: Results
  if defined WF (
    *** do something with it here ***
  ) else (
    echo The file: "%~1" was not found
  ) 

Вы можете заключить весь блок в функцию и вызывать его один раз для каждого EXE (замените %TARGET% обратно на %~1, присвойте ему: TITLE, затем call :TITLE wget.exe)...

С другой стороны, вы могли бы использовать другой подход и просто попробовать команды и посмотреть, не сработают ли они.Поскольку ERRORLEVEL 0 обычно означает успех, вы можете сделать что-то вроде этого:

wget -q <TARGET_URL>
IF NOT ERRORLEVEL 0 (
  curl <TARGET_URL>
  IF NOT ERRORLEVEL 0 (
    ECHO Download failed!
    EXIT 1
  )
)
:: now continue on with your script...
1 голос
/ 21 сентября 2011

Powershell v3 CTP1 поставляется с такой командой, как wget / curl.Это называется Invoke-Web-Request.Чтобы узнать больше, вы можете посетить этот пост: http://rambletech.wordpress.com/2011/09/21/windows-powershell-v3-includes-command-like-wgetcurl/

...