【问题标题】:Copy 1 file from multiple subdirectories to another directory将 1 个文件从多个子目录复制到另一个目录
【发布时间】:2012-03-04 09:53:35
【问题描述】:

我已经在 Google 和论坛上搜索了几天,试图弄清楚如何构建一个批处理文件,该批处理文件将解析目录树并将每个子目录中的 1 个文件复制到一个新文件夹中。

我有这个作为线索: http://www.pcreview.co.uk/forums/can-copy-file-multiple-folders-t1959548.html

而这... https://stackoverflow.com/questions/1...in-a-directory

我已经试过了:

@ECHO OFF
CLS
PAUSE
FOR /R %%A in (C:\Users\Liam\Desktop\Master) DO (   
COPY %%A  C:\Users\Liam\Desktop\Master\Master-Copies\
GOTO :Exit
)
:Exit
Pause

出现停顿是因为我想弄清楚到底发生了什么。

在我的“主”目录中有大约 250 个子目录。我想从每个子目录中复制一个文件并将它们放在一个名为“Master-Copies”的新子目录中,该子目录最终应该有 250 个文件。子目录和文件的名称中没有空格,但是我想将该功能构建到批处理文件中,以防我再次遇到这种情况。我想复制每个子目录中的第一个文件。我通过阅读其他论坛知道“FIRST”文件是相对的,但我希望它是按名称排序的第一个文件。

我知道我问了很多,希望这里的一些天才可以帮助一个刚接触编程的孩子。

【问题讨论】:

    标签: parsing batch-file copy subdirectory enumerate


    【解决方案1】:

    问题 1 - 您误用了 /R 选项。根目录应该跟在 /R 选项之后,文件过滤器应该出现在 IN() 子句中。通过在命令行中键入 FOR /? 来阅读 FOR 帮助。

    问题 2 - 您的循环将在第一个 GOTO 后中止,因此您最多只能从一个目录复制文件。

    问题 3 - 您需要跳过目标目录,因为它是根目录的子目录。

    解决方案:您将需要 2 个循环,第一个循环从根目录开始遍历目录层次结构,第二个循环列出单个目录中的文件。复制第一个文件后,您需要 EXIT /B 或 GOTO 退出第二个循环,但如果第二个循环嵌入在第一个循环中,这将不起作用 - exit/goto 将退出最外层循环。

    要解决这个问题,您需要让第一个循环调用包含第二个循环的子例程。然后,您可以从第二个循环中退出 /B,它将返回到您的第一个循环并从中断处继续。仅当目录与您的目标目录不匹配时才调用子例程。

    @echo off
    setlocal
    set root="C:\Users\Liam\Desktop\Master"
    set dest="C:\Users\Liam\Desktop\Master\Master-Copies\"
    for /r /d %root% %%D in (*) do if "%%D" neq %dest% call :copyFirstFile "%%D"
    pause
    exit /b
    
    :copyFirstFile
    for %%F in ("%~1\*") do (
      copy "%%F" %dest%
      exit /b
    )
    

    【讨论】:

    • 谢谢dbenham!您是否有机会尝试一下下面关于文件被覆盖的新问题?
    • @user1205701 如果此答案对您有所帮助,您应该接受并给予支持。
    猜你喜欢
    • 2012-02-15
    • 2017-11-18
    • 2013-06-01
    • 2020-06-22
    • 2014-08-12
    • 2013-10-24
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多