将同名的多个文件夹中存在的文件复制到不同的目标文件夹

时间:2013-04-09 07:53:22

标签: file for-loop cmd subdirectory

这是文件夹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

它不起作用因为存储在%folder%中的foldername gettig每次只是最后一个文件夹(此处为folder3)的名称,即folder1中的one.txt被复制到C \ folder3而其他文件没有被复制(系统找不到指定的文件)

1 个答案:

答案 0 :(得分:0)

如果要将循环变量分配给循环内的另一个变量,则必须启用延迟扩展:

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!)将在运行时扩展。