如何复制文件同时保持原始文件夹结构?

如何复制文件同时保持原始文件夹结构?

我想知道我是否能帮忙做以下事情:

搜索 PC(所有单元)中的所有 autocad 文件(*.DWG)和 word(*.doc),然后将它们从我的服务器复制到新路线;第一次运行必须是 FULL,然后只需更改复制 FULL 文件的日期。

我曾尝试使用以下方法:

mkdir \\server1\j$\bk_user\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofim\

FORFILES /P C:\ /S /M *.doc* /C "cmd /c COPY @file \\server1\j$\bk_user\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofima\"

FORFILES /P C:\ /S /M *.dwg /C "cmd /c COPY @file \\server1\j$\bk_user\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofim\"

关键是我不知道如何:

  1. 搜索所有硬盘,我当前的代码仅搜索驱动器 C:(我原本想为每个磁盘放置一行“如果存在 D:\转到 diskD”,但我不确定是否还有其他更有效的

  2. 每次找到并复制文件时,都将其复制并保持其原始文件夹结构,因为没有人知道它来自该文件的哪个位置,因为这些位置都在一起。

我希望你可以帮助我 ..

答案1

如何搜索所有硬盘?

要枚举所有本地驱动器,请使用以下批处理文件(GetDrives.cmd):

@echo off
setlocal enabledelayedexpansion
for /f "skip=1" %%d in ('wmic logicaldisk get caption ^| findstr /r /v "^$"') do (
  set _drive=%%d
  echo !_drive!
  rem add search code here
  )
endlocal

示例输出:

> GetDrives.cmd
C:
add search code here
D:
add search code here
E:
add search code here
F:
add search code here

要跳过 DVD/CD 驱动器,请使用以下批处理文件 (GetDrives.cmd):

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2" %%d in ('wmic logicaldisk get caption^, drivetype  ^| findstr /r /v "^$"') do (
  if not [%%e]==[5] (
    set _drive=%%d
    echo !_drive!
    echo add search code here
    )
  )
endlocal

示例输出(驱动器 d:是我的 DVD 驱动器):

> GetDrives.cmd
C:
add search code here
E:
add search code here
F:
add search code here

>

进一步阅读

答案2

我发现在保持文件夹结构的同时传输此类数据的最佳方式是通过 Robocopy。

使用 Robocopy,您还可以使用多线程支持来帮助加快传输速度。

示例:Robocopy C:\ *.dwg \\myserver\backup\users_C_Drive /MT:4

这将保留文件夹结构。稍后您可以发挥想象力,为要跳过的临时文件和文件夹添加自定义排除项。

答案3

如果要创建完全重复,请使用以下版本(相当于添加/E 和/PURGE):

robocopy c:\test d:\test /MIR

如果您只想复制目录和子目录(包括空目录),请使用

robocopy c:\test d:\test /E

正是 E 选项上的反斜杠阻碍了你。

要了解有关 Robocopy 的更多信息,请通过以下便捷搜索:

http://www.google.com?q=robocopy+syntax

摘自我的帖子Robocopy - 将目录复制到另一个目录

相关内容