Вот моя структура папок папки 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, а другие не копируются (система не может найти указанный файл)

0
Nisham Mohammed 9 Апр 2013 в 11:53

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!) раскрываются во время выполнения .

0
Ansgar Wiechers 9 Апр 2013 в 13:35