这是文件夹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而其他文件没有被复制(系统找不到指定的文件)
答案 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!
)将在运行时扩展。