0

这是我的文件夹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% 中的文件夹名称 gettig 每次都只是最后一个文件夹(这里是文件夹 3)的名称,即文件夹 1 中的 one.txt 被复制到 C\folder3 中,而其他文件没有被复制(系统不能找到指定的文件)

4

1 回答 1

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

于 2013-04-09T09:35:21.907 回答