【问题标题】:Batch file to copy files from one folder to another folder批处理文件将文件从一个文件夹复制到另一个文件夹
【发布时间】:2010-11-02 10:54:48
【问题描述】:

我在网络上有一个存储文件夹,所有用户都将在其中将他们的活动数据存储在服务器上。由于位置问题,现在该服务器将被新服务器替换,因此我需要将子文件夹文件从旧服务器存储文件夹复制到新服务器存储文件夹。我有以下前任:

从 \Oldeserver\storage\data & files 到 \New server\storage\data & files。

【问题讨论】:

  • 我假设您说的是 Windows 环境?
  • @HugoM.Zuleta,我知道 .bat 文件。但“批处理文件”并不一定能保证 Windows 环境。术语的使用早于 Windows(如 .bat 文件),我什至看到新手在 *nix 环境中使用该术语来表示“shell 脚本”。
  • @pluma 我同意,这主要是因为它们指的是由其操作系统的脚本工具完成的批处理操作。

标签: batch-file file-io


【解决方案1】:

如果您可以使用 Bash,您可以简单地使用以下带有递归选项的命令。

cp -r "C:\Users\sourceFolder\." "C:\Users\destinationFolder"

这将复制sourceFolderinsdedestincationFolder下包含的所有文件和文件夹

【讨论】:

    【解决方案2】:

    如果要复制文件不使用绝对路径,也就是相对路径:

    不要忘记在路径中写反斜杠而不是斜杠

    例子:

    copy children-folder\file.something .\other-children-folder
    

    PS:可以使用这些称为“批处理参数”的通配符检索绝对路径

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"
    

    在此处查看有关副本的文档:https://technet.microsoft.com/en-us/library/bb490886.aspx

    这里还有批处理参数文档: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

    【讨论】:

    • 我认为\被称为反斜杠。
    【解决方案3】:

    您可以使用 esentutl 复制(主要是大)带有进度条的文件:

    esentutl /y "my.file" /d "another.file" /o
    

    进度条如下所示:

    【讨论】:

      【解决方案4】:

      我最喜欢的备份数据是:

      ROBOCOPY "C:\folder" "C:\new_folder" /mir
      

      /mir 用于镜像。您还可以使用 /mov 移动文件。它重现了完全相同的文件夹。它可以根据需要删除/覆盖文件。对我很有用。 它比 xcopy / copy 快得多。它也内置在 Windows 中。

      来源:http://technet.microsoft.com/en-us/library/cc733145.aspx

      【讨论】:

      • 我支持这个。它真的很快。比 xcopy 快得多
      • 有没有类似这样递归删除 thumbs.db 的方法?
      • 正是我要找的东西。完全从源复制所有子文件夹和文件。
      【解决方案5】:
      @echo off
      
      rem The * at the end of the destination file is to avoid File/Directory Internal Question.
      
      rem You can do this for each especific file. (Make sure you already have permissions to the path)
      xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
      pause
      
      rem You can use "copy" instead of "xcopy "for this example.
      

      【讨论】:

        【解决方案6】:

        要绕过“在目标上指定文件名或目录名(F = 文件,D = 目录)?”使用 xcopy 提示,您可以执行以下操作...

        echo f | xcopy /f /y srcfile destfile

        或者对于我们这些只是复制大型子结构/文件夹的人:

        如果复制多个文件,使用 /i 指定目标必须是一个目录

        【讨论】:

        • (文件回显“f”或目录回显“D”)
        • 现在尝试执行此操作,但它无法正常工作 - 尝试将一个文件复制到另一个目录时,我总是收到提示。如果这完全影响它,请使用 Win 10 echo f | xcopy /f /y "My.dll" "C:\myFolder\My.dll"。我已经尝试结合其他开关无济于事(和大写 F)
        【解决方案7】:

        xcopy.exe 绝对是您的朋友。 它内置在 Windows 中,因此它的成本不高。

        只要xcopy /s c:\source d:\target

        您可能想要调整一些东西;我们还添加的一些选项包括:

        • /s/e - 递归复制,包括复制空目录。
        • /v - 添加此项以验证副本与原件的对比。较慢,但偏执狂。
        • /h - 复制系统和隐藏文件。
        • /k - 将只读属性与文件一起复制。否则,所有文件都变为可读写。
        • /x - 如果您关心权限,您可能需要/o/x
        • /y - 在覆盖现有文件之前不要提示。
        • /z - 如果您认为复制可能会失败并且您想重新启动它,请使用它。它会在每个文件复制时在每个文件上放置一个标记,因此您可以重新运行 xcopy 命令以从中断处继续。

        如果您认为 xcopy 可能会在中途失败(例如当您通过不稳定的网络连接进行复制时),或者您必须停止它并希望稍后继续,您可以使用 xcopy /s/z c:\source d:\target

        希望这会有所帮助。

        【讨论】:

        • @Iavino 在复制档案时询问文件或目录。有没有办法抑制它?
        • 嗨@mini-me - 我发现如果它是一个目录,你可以指定一个尾随'/'字符,你不会看到那个消息。
        • /i - 如果目标不存在并且复制多个文件,则假定目标必须是一个目录。
        • 如何从目录中复制单个文件?
        • 要绕过“文件或目录”提示,请执行以下命令...echo f | xcopy /s /f srcfile destfile
        【解决方案8】:

        需要说明的是,当你使用xcopy /s c:\source d:\target 时,在c:\source 和d:\target 两边加上"",否则会出错。

        如果路径中有空格,即如果有:

        "C:\Some Folder\*.txt"
        

        但如果您有,则不需要:

        C:\SomeFolder\*.txt
        

        【讨论】:

        • 引号成功了 ;) 谢谢我还使用 /Y 来替换文件(如果存在) :) 示例:´´´xcopy /s "c:\source" "d:\target " /Y```
        【解决方案9】:

        查看基于rsync 的Windows 工具NASBackup。如果您熟悉 rsync 命令,那将是一个奖励。

        【讨论】:

          【解决方案10】:

          您可能想看看XCopyRoboCopy,它们是适用于 Windows 上几乎所有文件复制操作的非常全面的解决方案。

          【讨论】:

          • RoboCopy 似乎比 XCopy 更好,因为 xcopy 要求文件或文件夹决策。我不能拒绝它。它必须能够全自动工作。
          • @mini-me 我知道这已经很晚了,但是我找不到相同的相关开关。我最终求助于让它创建一个与我复制到的名称相同的空白文件,然后覆盖它。如果文件已经存在,那么它不会打扰询问它是文件还是目录。 (如果你想要自动目录,那么你可以在路径中附加一个'/',它会这样做)。希望这对未来的人有所帮助!
          • @Eve 作为参考,echo f | xcopy source destination /y 将使其自动运行。它为所有问题分配一个“f”作为响应。它还将传递覆盖请求(我认为 f 被认为是)。
          猜你喜欢
          • 2014-03-21
          • 1970-01-01
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-10
          • 1970-01-01
          • 2011-08-22
          相关资源
          最近更新 更多