как включить или в цикле в пакетном скрипте - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь записать в папку результат моей моей компиляции: если есть один тип файла (файл1 или файл2), это означает, что моя компиляция прошла успешно. И я хочу сообщить об этом результате в текстовом файле

Я пытался сделать это с флагом, используя логические значения, но он просто не работает. я анализирую свои папки и в каждом выходе / NameofaRun я ищу, есть ли файл1 или файл2.

for /D %%X in (%1\*) do (
    set flag = 0
    if exist %%X\OUTPUT\%2\file1.txt ( flag = 1)
    if exist %%X\OUTPUT\%2\file2.txt ( flag = 1)
    if %flag% ==  1 ( echo %%X>>%3\Compilation_Check.txt Succeeded )
    if %flag% == 0 (
        echo %%X>>%3\Compilation_Check.txt Failed Warning
        )
)

Я хочу написать в "compilation_check.txt" результат моего txt. и я запускаю этот пакет с путем к папкам / имени папки в качестве параметров

1 Ответ

1 голос
/ 07 июня 2019

Ваша логика верна;несколько деталей не ...

  • Команда set получает в качестве имени переменной все символы перед знаком равенства , включая пробелы .Вы должны использовать set flag=0 или, что еще лучше, set "flag=0".
  • удобно удобно заключать имена файлов в кавычки, чтобы избежать проблем, если любое имя может содержать пробелы ...
  • Вы пропустили команду set при изменении значения flag.
  • Когда значение переменной изменяется внутри (block), новое значение не может бытьдоступ через %var%, но с использованием синтаксиса !var! и включением команды setlocal EnableDelayedExpansion в начале программы.Есть много подробных объяснений по этому вопросу;ищите «отложенное расширение».

Это ваш код с предыдущими модификациями:

setlocal EnableDelayedExpansion

for /D %%X in (%1\*) do (
    set "flag=0"
    if exist "%%X\OUTPUT\%2\file1.txt" ( set "flag=1" )
    if exist "%%X\OUTPUT\%2\file2.txt" ( set "flag=1" )
    if !flag! == 1 ( echo %%X Succeeded  >> "%3\Compilation_Check.txt")
    if !flag! == 0 (
        echo %%X Failed Warning  >> "%3\Compilation_Check.txt"
        )
)

Однако я бы сделал это следующим образом:

for /D %%X in (%1\*) do (
    set "anyFile="
    if exist "%%X\OUTPUT\%2\file1.txt" set "anyFile=1"
    if exist "%%X\OUTPUT\%2\file2.txt" set "anyFile=1"
    (if defined anyFile ( 
        echo %%X Succeeded
    ) else (
        echo %%X Failed Warning
    )) >> "%3\Compilation_Check.txt"
)

Вы не используете значение переменной flag.Команда if defined позволяет проверить наличие переменной;этот «трюк» позволяет избежать проблемы с отложенным расширением ...

Вы можете заключить несколько команд в (block), чтобы вывод всех из них был перенаправлен в один и тот же файл ...

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