我用它xcopy
来复制大量文件。我特别喜欢的一点是,xcopy
它有一个/F
开关,可以显示所有源文件和目标文件,包括路径,例如:
xcopy /E /Y /F D:\Temp_Folder\test_origin\* D:\Temp_Folder\test_dest\
D:\Temp\origin\B_Normal\blabla.txt -> D:\Temp\dest\B_Normal\blabla.txt
D:\Temp\origin\B_Normal\B.A\normal.txt -> D:\Temp\dest\B_Normal\B.A\normal.txt
D:\Temp\origin\B_Normal\B.B\drawing.bmp -> D:\Temp\dest\B_Normal\B.B\drawing.bmp
D:\Temp\origin\C_Fill_with_empty\empty.bmp -> D:\Temp\dest\C_Fill_with_empty\empty.bmp
D:\Temp\origin\C_Fill_with_empty\empty.txt -> D:\Temp\dest\C_Fill_with_empty\empty.txt
5 File(s) copied
然而似乎存在一些问题:
D:\Temp\origin>tree /F /A
...
D:.
+---A_Empty
+---B_Normal
| | blabla.txt
| |
| +---B.A
| | normal.txt
| |
| \---B.B
| Drawing.bmp
|
\---C_Fill_with_empty
| empty.bmp
| empty.txt
|
\---empty
如您所见,目录D:\Temp\origin\A_Empty\
和D:\Temp\origin\C_Fill_with_empty\empty\
似乎没有被复制(似乎复制的是空文件,而不是空目录)。
但事实并非如此:在目标文件夹中,目录A_empty
和C_Fill_with_empty\empty
都在那里,但/F
开关只显示已复制的文件,因此空目录的复制已完成,但没有显示。(在我最初的帖子中,我以为空目录没有被复制)
最重要的是,我不明白这个/C
开关的意思,它说
即使出现错误也继续复印。
昨晚xcopy
一堆复制的结果出现了错误信息:
\\nas\<Complicated_Directory_Tree>\<file1>.gif -> G:\<Complicated_Directory_Tree>\<file1>.gif
\\nas\<Complicated_Directory_Tree>\<file2>.gif -> G:\<Complicated_Directory_Tree>\<file2>.gif
Sharing violation
我想使用重试机制来避免这种无法重现的错误消息,但我不知道交换机/C
会如何表现:它会表现为“重试”还是“忽略”?(这个问题已经被其他人问过了,但那些人收到了改为的建议robocopy
,但正如在这个 StackOverflow 帖子,而且这似乎不太容易出错)。
有人知道如何强制重试机制吗?
提前致谢
答案1
这 /E 参数复制目录和子目录,包括空目录。只需添加该参数,问题就解决了。
这/C即使出现错误,参数仍会继续复制。这样应该可以避免任何问题。
具体来说,/C忽略错误并继续复制下一个有效文件。
如果您希望在出现错误时重试(尽管不推荐),您可以在批处理文件中使用 WHILE 循环(有用的命令:如果错误级别= 和暂停)。例子。