【问题标题】:Batch to find and copy folders from textlist批量从文本列表中查找和复制文件夹
【发布时间】:2013-11-05 11:03:03
【问题描述】:

我正在寻找批处理来查找文本文件中列出的所有文件夹并将其复制到指定位置。

例如一个有:

  1. Textfile.txt 的内容:

    • 01
    • 02
    • 03
    • 04
  2. 带有子文件夹的头文件夹。

我正在寻找的文件夹(来自 Textfile.txt 的文件夹)可以放在每个子文件夹中。 如果我想从 Textfile.txt 中查找文件夹并将其复制到指定位置。我需要从头文件夹中搜索所有子文件夹

示例文件夹树

  1. 主文件夹
    • 子文件夹(11st、12st、13st...)
    • 文件夹 (01, 02, 03, 04,)

请帮我建造那批。谢谢。

其他信息:

- 主文件夹(头文件夹)
  - 约翰(文件夹)
    - 01(文件夹)(可以为空,没有任何文件夹和文件)
      - 11st(文件夹)(可以是空白,没有任何文件夹和文件)
        - file1.txt(文件)
        - 文件 2.xls
      - 12 日
      - 13 日
    - 02
    - 03
    - 04
  - 托马斯
    - 05
      - 11 日
      - 12 日
      - 13 日
    - 06
  - 伊娃
  - 马丁
    - 07
      - 11 日
      - 12 日
      - 15 日
  - 乔治
    - 08

我需要从 Textfile.txt 中找到并复制整个文件夹 01、02、03、04 等,即使是空白文件夹。

【问题讨论】:

    标签: batch-file copy find directory subdirectory


    【解决方案1】:

    以下内容应在批处理文件中起作用:

    FOR /F %%F IN (Textfile.txt) DO xcopy /I /E "C:\Source\%%F" "D:\Dest\%%F"
    

    您还可以应用更多开关:

      /C           Continues copying even if errors occur.
      /H           Copies hidden and system files also.
      /R           Overwrites read-only files.
      /Y           Suppresses prompting to confirm you want to overwrite an
                   existing destination file.
    

    更新

    在您的特定情况下,当您拥有分散在子文件夹中的文件夹列表时,此脚本应该可以工作:

    @echo off
    
    set SRC_FOLDER="C:\Source"
    set DST_FOLDER="C:\Destination"
    
    REM this makes sure that if the first folder in list is empty - it is copied 
    IF NOT EXIST %DST_FOLDER% MKDIR %DST_FOLDER%
    
    REM loop through the items in list; use one per line 
    REM for group match use <NAME>*
    FOR /f %%F IN (%~dp0\Textfile.txt) DO (
       REM loop through all folders
       FOR /f "delims=" %%D IN ('DIR %SRC_FOLDER% /A:D /B') DO (
           REM loop through FOLDER/NAME* sub-folders
           FOR /f "delims=" %%G IN ('DIR %SRC_FOLDER%\"%%D\%%F" /A:D /B') DO (
              IF EXIST %SRC_FOLDER%\"%%D\%%G" XCOPY /I /E %SRC_FOLDER%\"%%D\%%G" %DST_FOLDER%\"%%~nG"
           )
           REM loop through all FOLDER subfolders to catch NAME subfolders 
           FOR /f "delims=" %%G IN ('DIR %SRC_FOLDER%\"%%D" /A:D /B') DO (
              IF "%%G" == "%%F" XCOPY /I /E %SRC_FOLDER%\"%%D\%%G" %DST_FOLDER%\"%%~nG"
           )
       )
    )
    
    • 请注意,需要“delims=" 参数来更正对带有空格的路径的处理。enter code here

    【讨论】:

    • 我试过这个,但只有当所有文件夹都在一个目录中时它才有效。如果文件夹在子目录中,ift 不起作用。
    • @Artec 好的,我以为您指定了与一个根文件夹相关的所有文件夹...但事实证明您还需要找到 .然后,问题 - 您是否需要在目标文件夹中复制文件夹结构,如果不需要 - 如果在源中找到两个同名文件夹怎么办?
    • 理论上不可能,例如 JOHN 和 EWA 的文件夹 nr 01。
    • 我有很多私人文件夹的名称:John、Ewa、George……他们收集的数据结构相同,唯一的区别在于子文件夹名称。如果文件夹 01、02、03...等都放在根文件夹中,则您的代码运行良好。我需要将它们放置到根文件夹而不是从文本列表复制到指定文件夹的方法。
    • pmod@ 当我以管理员身份运行它时,我看到“找不到 Textfile.txt”。如果我在“Textfile.txt”的顶部或完整路径上添加 pushd“%~dp0”,它可以工作。但如果我在 John 文件夹中有 100 个文件夹 01、02...100 和“Textfile.txt”我只有 01 它仍然复制所有 100 个文件夹。这个过程是不需要的。是否可以从列表中仅复制此文件夹?
    猜你喜欢
    • 2021-09-04
    • 2014-04-03
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多