Вот моя структура папок папки A
A\Temp\folder1\c\one.txt
A\Temp\folder2\c\one.txt
A\Temp\folder3\c\one.txt
И еще одна папка B
B\folder1.ext\c\ Note: the extension is part of its folder name.
B\folder2.ext\c\
B\folder3.ext\c\
Я хочу скопировать все файлы one.txt из A \ Temp * \ c \ one.txt в C * \ c \
Сейчас я пытаюсь:
for /D %%b in (TEMP\*) do (
set folder=%%~nb
ECHO %%~b
ECHO Copying %%b
ECHO.
ECHO.
COPY %%b\c\one.txt B\%folder%.ext\c
Это не работает, потому что gettig имени папки, хранящийся в% folder%, - это только имя последней папки (здесь folder3) каждый раз, то есть one.txt из папки folder1 копируется в C \ folder3, а другие не копируются (система не может найти указанный файл)
1 ответ
Если вы хотите назначить переменную цикла другой переменной внутри цикла, вам необходимо включить отложенное расширение:
setlocal EnableDelayedExpansion
for /D %%b in (TEMP\*) do (
set folder=%%~nb
ECHO %%~b
ECHO Copying %%b
ECHO.
ECHO.
COPY %%b\c\one.txt B\!folder!.ext\c
)
endlocal
В противном случае вам нужно использовать переменную цикла:
for /D %%b in (TEMP\*) do (
COPY %%~b\c\one.txt B\%%~nb.ext\c
)
Причина этого в том, что без отложенного раскрытия переменные (%folder%
) раскрываются во время синтаксического анализа , то есть при чтении команды (блока). Если включено отложенное раскрытие, переменные (!folder!
) раскрываются во время выполнения .
Похожие вопросы
Новые вопросы
file
Блок произвольной информации или ресурс для хранения информации, доступный по строковому имени или пути. Файлы доступны для компьютерных программ и обычно основаны на постоянном хранилище.