使用嵌套循环将文件列表中的文件批量复制到文件夹列表中的文件夹中



我想同时从文件列表和文件夹列表中读取,并通过文件重命名将每个文件复制到每个文件夹中。

下面是我的原始代码。外部循环不递增。我已经尝试了各种方法来应用我所读到的关于循环和延迟扩展的内容,但都没有奏效。

有人能告诉我如何修复代码或使用什么吗?

编辑以澄清问题:每次迭代时,"echo-src"都会回显Filelist.txt中的第一行。永远不会更改。另一方面,"echo-dest"确实按预期(所需)遍历folderlist.txt。

@echo off
setlocal enabledelayedexpansion
:: var is set in calling routine
SET "newname=%var%_filename_0.jpg"   
    FOR /F  %%G IN (Filelist.txt) DO (
    FOR /F %%H IN (Folderlist.txt) DO (
        SET src=%%G
        SET dest=%%H
            echo src is !src!
            echo dest is !dest!
            REM Here with each iteration do a copy and rename
            :: copy "!src!" "!dest!%newname%"  1>nul
  )
)

代码中的主要问题不是语法,而是概念。您的代码从文件列表中读取一行,然后,对于这一行,读取文件夹列表中的所有行。

如果您有嵌套的for循环,那么对于外部for的每次迭代,都会执行内部循环的所有迭代。

如果你需要从两个文件中同步读取一行,你需要类似的东西

@echo off
    setlocal enableextensions disabledelayedexpansion
    < files (
        for /f "delims=" %%a in (folders) do (
            set /p "myFile="
            setlocal enabledelayedexpansion
            for /f "delims=" %%b in ("!myFile!") do (
                endlocal
                echo %%a %%b
            )
        )
    )

也就是说,使用for命令读取文件夹列表,并且使用set /p从标准输入读取文件列表。由于我们将文件列表重定向为输入,set /p将从中获取数据。

最新更新