我想知道我是否能帮忙做以下事情:
搜索 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\"
关键是我不知道如何:
搜索所有硬盘,我当前的代码仅搜索驱动器 C:(我原本想为每个磁盘放置一行“如果存在 D:\转到 diskD”,但我不确定是否还有其他更有效的
每次找到并复制文件时,都将其复制并保持其原始文件夹结构,因为没有人知道它来自该文件的哪个位置,因为这些位置都在一起。
我希望你可以帮助我 ..
答案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
>
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 查找字符串- 在文件中搜索字符串。
- 对于/f- 循环命令以执行另一个命令的结果。
- 西米克- Windows 管理规范
答案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 - 将目录复制到另一个目录