【问题标题】:Use nested loop to copy files in filelist to folders in folderlist, with batch使用嵌套循环将文件列表中的文件复制到文件夹列表中的文件夹,批量
【发布时间】:2014-08-27 05:34:25
【问题描述】:

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

以下是我的原始代码。外部循环不会增加。我已经尝试了所有方法来应用我读过的关于循环和延迟扩展的内容,但没有任何效果。

谁能告诉我如何修复代码或改用什么代码?

编辑以澄清问题:每次迭代时,“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
  )
)

【问题讨论】:

  • “外部循环不增加”是什么意思?你的意思是Count 不会增加吗?因为 count 在你的 inside 循环中,而且它似乎是你试图增加的唯一东西,所以我不明白你的意思。
  • 对不起。第 1 个帖子。我的 src var (%%G) 始终等于 filelist.txt 中的第一行,而 dest var 根据需要遍历文件夹列表的行。 (我会拿出柜台。)
  • 您的代码在这里运行良好(尽管我不知道它是否按照您期望的方式运行) - 有一个例外:标签:end 不存在,所以它不会退出当计数器达到 endcount 时。将其替换为 goto :eof 会有所帮助。
  • 你的文件组织结构是否应该是这样的:Folder1 - File1, File2, File3, File4, File5... Folder2 - File1, File2, File3, File4, File5... Folder3 - File1 , 文件 2, 文件 3, 文件 4, 文件 5... ....
  • Rafael:不。要复制的文件在桌面/子目录中。文件的数量各不相同,但始终少于文件夹。我将多次复制一些文件以填满文件夹。这就是我想要/需要从文件列表工作的原因。文件进入像 desktop/sub/sub1/sub2/sub3 这样的结构的“sub3”文件夹,其中有多个 sub2 文件夹,每个文件夹下都有一个 sub3。 (希望有帮助)

标签: batch-file for-loop copy nested


【解决方案1】:

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

如果您嵌套了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 将从中获取其数据。

【讨论】:

  • 真是天才!但我想您可以删除内部 for,并直接使用 myfile。
  • @speising,因为我不知道如何处理文件/文件夹引用,并且为了避免值中可能出现感叹号的问题,最好处理禁用延迟扩展的值。但是我们需要启用它来读取变量。因此,包含for 以读取变量值(延迟扩展处于活动状态),将其存储在for 可替换参数中,然后禁用延迟扩展以防止出现问题。可以删除for 吗?可能是的,但没有更多信息/代码我不确定。
  • 编辑:文件信息 (%%b) 没有回显。主持人!这很可能是它。当你解释它是有道理的。需要再测试一点。奇怪的事情:回显输出到文件只给出了 37 个文件夹路径中的 4 个。在编辑器中运行(非常奇怪)我正在跟踪到 android 设备上原始位置的路径,它没有出现在文件夹列表中!更多调查。
  • @user338032,我已阅读您在问题中的最后一条评论。如果文件列表短于文件夹列表,则无法进行同步的文件夹读取。您能否在问题中包含您的文件样本以及重复使用文件来填充文件夹的标准?
  • @MCND,列表长度相同。我用重复文件构建文件列表到=文件夹。回复:^奇怪的输出和没有回声=我的错误输入。认为你的方法会奏效。测试后将发布更多信息或对此答案投票。谢了!
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2015-02-08
  • 2021-10-16
  • 1970-01-01
  • 2013-11-05
相关资源
最近更新 更多