我一直在尝试编写一个.bat
程序,它可以查找所有具有给定扩展名的文件,例如 *.doc,并将它们放入档案中rar
。
我希望复制所有文件,即使它们具有相同的名称(我在不同的目录中有同名的文件)我不在乎这些文件是否会被重命名,只要我保留所有文件即可。例如,如果我在 中有一个 ,new.doc
在中有Desktop
一个,我不介意这两个文件中的一个甚至两个都被重命名或以其他方式重命名。或者,程序可以使用找到它们的路径保存它们。最好使用或任何其他压缩程序,但如果确实有必要,也可以使用其他程序。最后但并非最不重要的一点是,我希望程序搜索整个计算机(所有硬盘)。例如,我有 ,和,我想搜索所有 3 个并创建存档。我尝试了几种解决方案,并且已经new.doc
D:
new1.doc
new2.doc
rar
7-zip
C:
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
创建多个卷(即分割档案)的开关。