2013-05-24 2 views
2

Я вызываю пакетный скрипт из vbscript.return value from batch script

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

@echo off 
setlocal ENABLEDELAYEDEXPANSION` 
for /f "usebackq" %%i in (`"%1"\fciv.exe" -md5 %2"`) do set md5_1=%%i 
for /f "usebackq" %%i in (`"%1"\fciv.exe" -md5 %3"`) do set md5_2=%%i 

if "!md5_1!" == "!md5_2!" ( 
    set md5_1= 
    set md5_2= 
    exit 0 
) else ( 
    set md5_1= 
    set md5_2= 
    exit 1 
) 
endlocal 

Я получаю значение 0 для обоих условий.

Может ли кто-нибудь мне помочь?

+0

Он прекрасно работает меня. Отправьте свой сценарий. –

+0

@echo off setlocal ENABLEDELAYEDEXPANSION для/f "usebackq" %% i in ('"% 1 "\ fciv.exe" -md5% 2 "') установить md5_1 = %% i для/f "usebackq" %% i in ('"% 1 "\ fciv.exe" -md5% 3 "') установить md5_2 = %% i, если "! md5_1!" == "! md5_2!" (set md5_1 = set md5_2 = exit 0) else (set md5_1 = set md5_2 = exit 1) endlocal Код фактически генерирует контрольную сумму для двух файлов и возвращает 0, если они одинаковы, возвращает 1, если они разные – Tjs

+0

Вы можете редактировать свои вопрос, чтобы добавить код. Кроме того, вам нужно использовать 'exit/b ' –

ответ

0

Обе ваши команды имеют несоответствующие кавычки и могут терпеть неудачу с длинными именами. Попробуйте это

Вы не используете замедленное расширение и обнуление переменных бессмысленно при выпуске setlocal.

Usebackq не требуется.

В конце концов, это плохая практика использования %% i, потому что она очень похожа на %% l и %% 1 Microsoft использует ее в примерах, я знаю.

@echo off 
setlocal 
for /f %%a in ('"%~1\fciv.exe" -md5 "%~2"') do set md5_1=%%a 
for /f %%a in ('"%~1\fciv.exe" -md5 "%~3"') do set md5_2=%%a 

if "%md5_1%"=="%md5_2%" (exit /b 0) else (exit /b 1) 
endlocal 
4

Процессор партии (cmd) фактически сохранит уровень ошибок последнего вызова. Чтобы использовать эту функцию, не называйте endlocal в конце сценария, это called implicitly anywayMSDN Кроме того, всегда используйте exit /b внутри скрипты, как обычный исходящий звонок будет также выйти текущий экземпляр пакетного процессора