Пакет для L oop %% я не расширяется - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь получить файлы из папок в пакетном режиме. И это весь пакетный файл:

for %%i in (folder) do echo (for /r "%%~i" %%j in (*.png) do echo %%~i-%%j)

Код выполняется как задумано и выводится на консоль:

(for /r "folder" %j in (*.png) do echo folder-%j)

Если я скопирую это и вставлю его как есть в cmd на по тому же пути он перекликается с моим файлом.

Но если я удаляю первое эхо из пакета, он выдает:

(for /R "%~i" %j in (*.png) do echo folder-%j )

Обратите внимание, что он не выполняет for для l oop, а второй %% i расширен, но сначала нет. Я не могу понять, почему этот чрезвычайно базовый пакет из одной строки не работает. Любая помощь приветствуется.

1 Ответ

1 голос
/ 28 апреля 2020

Как уже упоминалось здесь , вы не можете использовать мета-переменную for в качестве значения параметра for /R. Это связано с тем, что параметры читаются и анализируются до раскрытия метапеременных for. Команда for, а также команды if и rem распознаются раньше, чем другие команды, как описано в this post ; for мета-переменные и отложенное расширение раскрываются позже, поэтому они читаются буквально при разборе этих команд.

В качестве обходного пути поместите внутренний for /R l oop в подпрограмму -программы, вызовите его по call и используйте ссылку на аргумент, например %~1, чтобы передать текущее значение внешнего for l oop:

for %%i in ("folder") do call :SUB "%%~i"
goto :EOF

:SUB
for /R "%~1" %%j in ("*.png") do echo "%~1"-"%%~j"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...