【问题标题】:Copy a file present in multiple folders under same name to different destination folder将存在于多个文件夹中的同名文件复制到不同的目标文件夹
【发布时间】:2013-04-09 07:53:21
【问题描述】:

这是我的文件夹 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 中,而其他文件夹没有被复制(系统找不到指定的文件)

【问题讨论】:

    标签: file for-loop cmd subdirectory


    【解决方案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!) 在运行时进行扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2020-01-13
      • 2017-02-27
      相关资源
      最近更新 更多