【问题标题】:copying all contents of folder to another folder using batch file?使用批处理文件将文件夹的所有内容复制到另一个文件夹?
【发布时间】:2011-06-03 19:45:29
【问题描述】:

我在C:\Folder1中有一个文件夹

我想将Folder1的所有内容复制到另一个位置,D:\Folder2

如何使用批处理文件执行此操作?

【问题讨论】:

    标签: windows batch-file copy directory


    【解决方案1】:

    这是一个使用 robocopy 的解决方案,它将 Folder1 的内容复制到 Folder2 并通过所有子目录并自动覆盖具有相同名称的文件:

    robocopy C:\Folder1 C:\Folder2 /COPYALL /E /IS /IT
    

    这里:

    /COPYALL 复制所有文件信息
    /E 复制子目录,包括空目录
    /IS 包括相同的文件
    /IT 包括修改后的同名文件

    更多参数见官方文档:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

    注意:由于参数/COPYALL,可能需要以管理员身份运行命令。如果你不能:就摆脱它。

    【讨论】:

      【解决方案2】:

      我已经编写了一个 .bat 文件来将文件复制并粘贴到一个临时文件夹,然后将其压缩并传输到一个 smb 挂载点, 希望这会有所帮助,

          @echo off
          if not exist "C:\Temp Backup\" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
          if not exist "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP"
          if not exist "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
          xcopy /s/e/q "C:\Source" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
         Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
          "C:\Program Files (x86)\WinRAR\WinRAR.exe" a  "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP\ZIP_Backup_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%.rar" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\TELIUM"
          "C:\Program Files (x86)\WinRAR\WinRAR.exe" a  "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP\ZIP_Backup_Log_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%.rar" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
          NET USE \\IP\IPC$ /u:IP\username password
          ROBOCOPY "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP"  "\\IP\Backup Folder" /z /MIR /unilog+:"C:\backup_log_%date:~-4,4%%date:~-10,2%%date:~-7,2%.log"
          NET USE \\172.20.10.103\IPC$ /D
          RMDIR /S /Q "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
      

      【讨论】:

        【解决方案3】:

        RoboCopy 对我不起作用,这里有一些很好的解决方案,但没有人解释 XCopy 开关及其作用。如果您的路径中有空格,您还需要引号。

        xcopy /i /e "C:\temp\folder 1" "C:\temp\folder 2"

        这是来自 Microsoft 的文档:

        XCopy MS Documentation

        /s: Specifies to include subdirectories. Excludes empty subdirectories
        /e: Copies all subdirectories, even if they are empty
        /i: specifies the destination is a folder (Otherwise it prompts you)
        

        【讨论】:

          【解决方案4】:
          @echo off
          xcopy /s C:\yourfile C:\anotherfile\
          

          这就是它的完成方式! 很简单吧?

          【讨论】:

            【解决方案5】:

            我看到很多建议使用 xcopy 的答案。 但这是不必要的。正如问题清楚地提到,在这种情况下,作者希望文件夹中的内容而不是文件夹本身被复制,我们可以 - :

            copy "C:\Folder1" *.*  "D:\Folder2"
            

            仅此而已如果C:\Folder1中存在任何子目录,则可以使用xcopy

            【讨论】:

            • 如果您要复制到的文件夹尚不存在(我相信),这将不起作用,因此您可能需要添加 md D:\Folder2
            • 我的copy 命令(Windows 10 命令提示符)告诉我语法不正确。以下是正确的语法:copy "C:\Folder1\*.*" "D:\Folder2"
            【解决方案6】:

            在我的电脑上,xcopy 和 robocopy 还需要它们的路径,即 C:\Windows\System32\xcopy.exe

            这就是我简单地使用“复制”的原因: 复制 /y ....\Folder1\File.txt ....\Folder2\

            【讨论】:

              【解决方案7】:

              如果你想删除告诉目标是文件还是文件夹的消息,你只需添加一个斜杠:

              xcopy /s c:\Folder1 d:\Folder2\

              【讨论】:

              • 次要补充:在 DOS 中,要从一个驱动器的根目录复制到另一个驱动器,不应出现转义斜线。例如xcopy /s C: D:
              【解决方案8】:

              仅供参考...如果您使用 TortoiseSVN 并且想要创建一个简单的批处理文件以定期将整个存储库 xcopy(或目录镜像)到“安全”位置,那么这就是您可能想要的特定代码使用。它复制隐藏的目录/文件,维护只读属性,所有子目录,最重要的是,不提示输入。只需确保正确分配文件夹 1(安全仓库)和文件夹 2(可用仓库)即可。

              @echo off
              echo "Setting variables..."
              set folder1="Z:\Path\To\Backup\Repo\Directory"
              set folder2="\\Path\To\Usable\Repo\Directory"
              echo "Removing sandbox version..."
              IF EXIST %folder1% (
                  rmdir %folder1% /s /q
              )
              echo "Copying official repository into backup location..."
              xcopy /e /i /v /h /k %folder2% %folder1%
              

              伙计们,就是这样!

              添加到您的计划任务中,永不回头。

              【讨论】:

                【解决方案9】:

                xcopy.exe 是这里的解决方案。它内置在 Windows 中。

                xcopy /s c:\Folder1 d:\Folder2
                

                您可以在http://www.computerhope.com/xcopyhlp.htm找到更多选项

                【讨论】:

                • 你好 Hussain,我已经在批处理文件中尝试了 xcopy /s c:\Folder1 d:\Folder2 命令,但它对我不起作用。你能指导我更多吗?
                • 嗨,可能是你的机器上没有那个 xcopy。但是你可以从这里下载批处理文件brothersoft.com/xcopy-177904.html
                • 如果你想复制空子目录,你应该使用 /s /e 标志。
                • /e 不自动包含 /s 吗?
                • xcopy 已弃用,并在文件名超过 254 个字符时触发“内存不足”错误。改用robocopyrobocopy C:\Folder1 D:\Folder2 /COPYALL /Een.wikipedia.org/wiki/Robocopy
                【解决方案10】:
                @echo off
                :: variables
                echo Backing up file
                set /P source=Enter source folder:
                set /P destination=Enter Destination folder:
                set xcopy=xcopy /S/E/V/Q/F/H/I/N
                %xcopy% %source% %destination%
                echo files will be copy press enter to proceed
                pause
                

                【讨论】:

                • 对您的代码的解释不仅对提出这个问题的人有益,而且对未来偶然发现这个问题以寻找解决同一问题的方法的人有益。
                • 你有几个直接与其他标志相矛盾的标志。 /S 复制目录和子目录,但空目录除外,/E 复制目录和子目录,包括空目录。 /Q 在复制时不显示文件名,而/F 在复制时显示完整的源文件名和目标文件名。
                【解决方案11】:
                @echo off
                ::Ask
                echo Your Source Path:
                set INPUT1=
                set /P INPUT1=Type input: %=%
                
                echo Your Destination Path:
                set INPUT2=
                set /P INPUT2=Type input: %=%
                
                xcopy %INPUT1% %INPUT2% /y /s
                

                【讨论】:

                  【解决方案12】:

                  如果你有 robocopy,

                  robocopy C:\Folder1 D:\Folder2 /COPYALL /E
                  

                  否则,

                  xcopy /e /v C:\Folder1 D:\Folder2
                  

                  【讨论】:

                  • 如果复制的是Folder1的内容,如果要复制文件夹本身怎么办?
                  • @KyleDelaney 在目标中包含源文件夹名称,例如"xcopy /e /v C:\Folder1 D:\Folder2\Folder1\"
                  • 请注意RoboCopy uses \ as an escape character (CMD does not),如果您尝试传入带有空格和结束斜杠(如"C:\My Folder\")的带引号的路径,您可能会得到一个令人讨厌的惊喜.我建议非常仔细地阅读 SS64 页面。有关“什么是 CMD 中的转义字符”兔子洞的完整旅程,请参阅Escaping Double Quotes in Batch Script
                  猜你喜欢
                  • 1970-01-01
                  • 2014-03-21
                  • 2010-11-02
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-12
                  • 2019-12-20
                  • 2015-05-10
                  • 1970-01-01
                  相关资源
                  最近更新 更多