Пакет Windows: реагировать на команду не найдена - PullRequest
2 голосов
/ 02 июня 2010

Я хочу написать простой пакетный скрипт, который вызывает определенный exe, но если этот не найден, он должен вызвать другой exe.

так в псевдокоде

set file=c:\path\tool.exe
if(fileexists(file))
{
    call file
}
else
{
    call c:\somethingelse.exe
}

спасибо!

Ответы [ 3 ]

3 голосов
/ 02 июня 2010

Вы можете использовать ERRORLEVEL , чтобы проверить, успешно ли выполнен вызов.

call file.exe
IF ERRORLEVEL 1 other.exe

Это будет работать для исполняемых файлов, которые находятся в пути, и вы не знаете точное местоположение. Однако будет напечатано сообщение об ошибке.

3 голосов
/ 16 августа 2011

Чтобы очень похоже на псевдокод, опубликованный в оригинальном вопросе:

set FILE1=c:\path\tool.exe
set FILE2=c:\path\to\other\tool.exe
if exist "%FILE1%" (
    %FILE1%
) else (
    %FILE2%
)

Как указал Джои, на самом деле это открытая форма:

%FILE1% || %FILE2%

но я не согласен. Первый работает FILE2

  1. когда FILE1 не существует или
  2. существует, но не удалось.

Также печатается дополнительное сообщение об ошибке, когда файл не может быть выполнен (в основном из-за того, что он не найден или доступ запрещен). Для подавления этого сообщения используйте:

(%FILE1% || %FILE2%) 2>nul

Например

> (echo a || echo b)
a
> (echoa || echo b) 2>nul
b

Чтобы подавить все выходные данные и просто организовать, чтобы любой из обоих файлов был запущен:

(%FILE1% || %FILE2%) 1>&2 2>nul

или

((%FILE1% || %FILE2%) 1>&2 2>nul) || echo both have failed

как в:

> ((echo a || echo b) 2>nul) || echo both have failed
a
> ((echoa || echo b) 2>nul) || echo both have failed
b
> ((echoa || echob) 2>nul) || echo both have failed
both have failed
2 голосов
/ 02 июня 2010

Может быть, что-то подобное может работать?

set FILE=whatever.exe
IF EXIST %FILE% GOTO okay

:notokay
echo NOT FOUND
GOTO end

:okay
echo FOUND
%FILE%

:end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...