Пакетный скрипт для цикла не устанавливает переменную

У меня есть пакетный скрипт, который пытается выполнить из муравейника, чтобы получить имена папок, содержащие plsql для компиляции.

for /F %%a in ('dir /b D:\AHP_WorkDir\var\jobs\projects\rprt_test\rprt_test\plsql') do (
  set FOLDER=%%a
  echo *** PROCESSING FOLDER %FOLDER% ***
)

Это эхо* ОБРАБОТКА ПАПКА *

как будто переменная не устанавливается, что я уверен, что это правда, после того, как потратил слишком много времени на его проверку

Итак... Что я делаю не так?

1 ответ

Решение

По сути, это дубликат вопроса, заданного ранее сегодня. Вот мой ответ на указанный вопрос...

Вы захотите посмотреть на опцию EnableDelayedExpansion для пакетных файлов. Из вышеупомянутой ссылки:

Задержка раскрытия переменных часто полезна при работе с циклами FOR. Обычно весь цикл FOR оценивается как одна команда, даже если он занимает несколько строк пакетного сценария.

Таким образом, ваш скрипт будет выглядеть примерно так:

@echo off
setlocal enabledelayedexpansion

for /F %%a in ('dir /b D:\AHP_WorkDir\var\jobs\projects\rprt_test\rprt_test\plsql') do (
  set FOLDER=%%a
  echo *** PROCESSING FOLDER !FOLDER! ***
)

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

Другие вопросы по тегам