Пакетний файл: змінний середовища "if" тест рядка


1

У пакетному файлі я називаю інший пакетний файл, щоб встановити декілька змінних оточення.

Змінні дані встановлені правильно, і я можу їх викликати.

Однак у цьому випадку мені потрібно порівняти дві з цих змінних середовища і визначити, чи є вони однаковими для того, щоб умовно запустити решту партії (або перейти до кінця / виходу).

Тим не менш, я не можу отримати умовні для виконання тесту (порівняння) двох змінних оточення.

Вони визначаються як% today2% (сьогоднішня дата встановлена ​​як MMDDYY) і% firstmonday%, яка є розрахованою перший понеділок місяця і встановлена ​​як MMYYDD). При запуску сьогодні (14 жовтня 2015 року), вони повертають 101415 і 110215.

Потім я намагаюся перевірити їх таким чином:

if %today2%==%firstmonday% goto GO else END

Проте тест, здається, повністю ігнорується - тест завжди переходить до GO незалежно.

Якщо я echo %today% і %firstmonday% вони, звичайно, різні, але тест оцінюється як правдивий і виконується.

Якщо я не пояснювати себе чітко, будь ласка, дайте мені знати, і я постараюся зробити це краще. Я скоріше новачок, коли мова йде про це, але обернулася з ним на деякий час і не може здатися, щоб з'ясувати логічний недолік.


Якщо ви вводите if /? він дає приклади правильного синтаксису, коли є else пункт: насправді він дає ваш приклад як примірник команди, яка НЕ ​​працює, разом з двома робочими версіями. Тому що else Синтаксис є неелегантним, мені легше відмінити тест, як в if not %today2%==%firstmonday% goto END, з наступним рядком як GO код.
AFH

Ти мусиш ..else goto END і є :END після вашого :GO маркер, оскільки він зараз переходить до наступного рядка.
paradroid

Відповіді:


1

Я створив два пакетні файли: b1.cmd і b2.cmd які слідують. Спочатку, b2.cmd яка встановлює ваші змінні, як описано:

set today2=101415
set firstmonday=110215

Потім b1.cmd який виконує за бажанням:

@echo off
call b2.cmd
echo today=%today2%
echo firstmonday=%firstmonday%
if "%today2%"=="%firstmonday%" (
    goto go
) else (
    goto end
)
:go
echo at go
goto :EOF
:end
echo at end
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.