【问题标题】:Batch File to copy folders from a text file to another directory批处理文件将文件夹从文本文件复制到另一个目录
【发布时间】:2013-05-20 23:34:32
【问题描述】:

我正在尝试创建一个批处理文件来读取文本文件并将包含文件的文件夹复制到另一个目录:

set dest=f:\Test
for /f %%i in (C:\dirs.txt) do copy "%%i" %dest%

当我运行这个批处理文件时,只复制文件。我想复制包含文件的文件夹。

IE 文件夹\文件到目标\文件夹\文件。

【问题讨论】:

  • windows - 批处理文件将文件夹从文本文件复制到另一个目录 - 代码日志

标签: windows batch-file cmd


【解决方案1】:

看看xcopy

xcopy /?

如果文本文件包含文件名,请尝试:

xcopy "%%i" %dest%\ /S

如果文本文件只包含目录名,试试:

xcopy "%%i\*" %dest%\ /S

【讨论】:

  • 是的,xcopy 在将文件夹复制到文件夹时效果特别好。将文件复制到文件夹有点棘手,但文件夹到文件夹很容易。 "xcopy.exe dirsrc dirdest /Q /F /D"
  • 基本上,如果文件夹 a 中有文件,我希望将文件夹 a 复制到其新目标
  • @jeff 然后使用/S 而不是/E。您是否阅读了xcopy /? 以了解如何使用它?
  • 我阅读了指南,但我仍然只是获取带有 /s 的文件。我将 /s 放在 %dest% /S 之后。我也在使用 Windows 7。
  • @Jeff 我已经编辑了我的答案。如果你提供一个尾随的 `\`,它会消除目标类型的歧义。目前尚不清楚您的源文件是否包含目录名或文件名。我已经提供了一个命令。
【解决方案2】:

您是否拥有 Vista 或更高版本?然后给 robocopy 一个机会:robocopy "source" "destination" /MIR。其他一些选项:

用法 :: ROBOCOPY 源目标 [file [file]...] [options] source :: 源目录(驱动器:\path 或 \\server\share\path)。 目的地 :: 目的地目录(驱动器:\path 或 \\server\share\path)。 file :: 要复制的文件(名称/通配符:默认为“*.*”)。 :: ::复制选项: :: /S :: 复制子目录,但不是空的。 /E :: 复制子目录,包括空目录。 /LEV:n :: 只复制源目录树的前 n 个 LEVels。 /Z :: 以可重新启动模式复制文件。 /B :: 在备份模式下复制文件。 /ZB :: 使用可重启模式;如果访问被拒绝,请使用备份模式。 /COPY:copyflag[s] :: 要复制的内容(默认为 /COPY:DAT)。 (复制标志:D=数据,A=属性,T=时间戳)。 (S=Security=NTFS ACL,O=Owner info,U=aUditing info)。 /SEC :: 使用 SECurity 复制文件(相当于 /COPY:DATS)。 /COPYALL :: 复制所有文件信息(相当于 /COPY:DATSOU)。 /NOCOPY :: COPY NO 文件信息(与 /PURGE 一起使用)。 /PURGE :: 删除源中不再存在的目标文件/目录。 /MIR :: MIRror 目录树(相当于 /E 加上 /PURGE)。 /MOV :: MOVe 文件(复制后从源中删除)。 /MOVE :: 移动文件和目录(复制后从源中删除)。 /A+:[RASHNT] :: 将给定的属性添加到复制的文件中。 /A-:[RASHNT] :: 从复制的文件中删除给定的属性。 /CREATE :: 仅创建目录树和零长度文件。 /FAT :: 仅使用 8.3 FAT 文件名创建目标文件。 /FFT :: 假定 FAT 文件时间(2 秒粒度)。 /256 :: 关闭非常长的路径(> 256 个字符)支持。 /MON:n :: 监控源;当看到超过 n 个更改时再次运行。 /MOT:m ::监控源;在 m 分钟内再次运行时间,如果更改。 /RH:hhmm-hhmm :: Run Hours - 可以开始新副本的时间。 /PF :: 以每个文件(而不是每次通过)为基础检查运行小时数。 /IPG:n :: Inter-Packet Gap (ms),释放慢速线路上的带宽。

Thera 是更有趣的选择。

【讨论】:

  • 将根据文本文件自动复制文件
  • 您可以创建一个job file 并存储它。但这不是文字。如果您正在寻找纯文本解决方案,则需要批处理脚本、powershell、VB 或类似的。
【解决方案3】:

在弄乱文件之前,您可能应该在 IE 中测试它。

    @echo off
    CD drive path of parent folder
    mkdir A
    CD ...\A 
    echo hello>1.txt
    echo hello2>2.txt
    mkdir A2
    xcopy A "drive path"
    start explorer.exe "path to A2"

这将建立一个基本的文件夹设置来测试它。 之后,如果它有效,请将其应用于您的文件路径。

【讨论】:

    【解决方案4】:

    上述解决方案似乎将目录内容复制到目标的根目录。并且对其中有空格的文件夹有问题。 尝试以下几行来解决这个问题...

    set dest=e:\Test
    for /f "delims=" %%i in (folders.txt) do xcopy "%%i\*" "%dest%\%%i\*" /E /F /Y
    
    /E also copies empty subdirectories
    /F lists the full filenames to copies (for debugging purposes)
    /Y answers questions with yes.
    

    将使用此命令创建不存在的目录,并且当它们存在于目标时它将覆盖文件。

    delims= 部分确保从文本文件中读取的目录可以包含空格

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2010-09-10
      • 1970-01-01
      • 2014-03-21
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2014-02-24
      相关资源
      最近更新 更多