将一个扩展的所有文件复制到一个文件夹中

将一个扩展的所有文件复制到一个文件夹中

我一直在尝试编写一个.bat程序,它可以查找所有具有给定扩展名的文件,例如 *.doc,并将它们放入档案中rar

我希望复制所有文件,即使它们具有相同的名称(我在不同的目录中有同名的文件)我不在乎这些文件是否会被重命名,只要我保留所有文件即可。例如,如果我在 中有一个 ,new.doc在中有Desktop一个,我不介意这两个文件中的一个甚至两个都被重命名或以其他方式重命名。或者,程序可以使用找到它们的路径保存它们。最好使用或任何其他压缩程序,但如果确实有必要,也可以使用其他程序。最后但并非最不重要的一点是,我希望程序搜索整个计算机(所有硬盘)。例如,我有 ,和,我想搜索所有 3 个并创建存档。我尝试了几种解决方案,并且已经new.docD:new1.docnew2.docrar7-zipC:D:F:D:\test.rar

for %%i in (c: d: f:) do for /f "delims=" %%j in ('dir /s /a-d /b %%i\*.doc') do "C:\Program Files\WinRAR\Rar.exe" a d:\test.rar "%%~j"

现在我的问题是,在某些电脑上它可以正常工作,但在某些电脑上它找到的文件比实际存在的文件少。我找到要搜索的文件总数,*.doc并将找到的文件数与.doc存档中的文件数进行比较。我不知道为什么有些文件找不到。任何见解或评论都将不胜感激。

答案1

在这种情况下,你甚至不需要使用for,因为 RAR 本身支持递归(更不用说for使用可怕地效率低下,因为您的命令每次都要打开和关闭存档才能更新它并添加下一个文件。请改用以下命令(如果您愿意,可以用 RAR.exe 替换 WinRAR.exe):

WinRAR a -ep2 -r D:\Test.rar C:\*.doc D:\*.doc F:\*.doc

如果您希望将驱动器号也存储在存档中,请将其替换-ep2为。此外,如果您以某种方式-ep3仍然在存档中找到的匹配文件少于系统中存在的文件,添加开关-e+rash然后进行比较。这应确保不会遗漏任何文件,无论其属性如何。

至于档案的最终大小,只需保存到 NTFS(或 exFAT)格式的驱动器即可。如果您担心单个大文件,请查看-v创建多个卷(即分割档案)的开关。

相关内容