2017-07-17 59 views
-2

我想编写一个批处理脚本,将readme.txt文件添加到某些目录,然后压缩整个目录。如何将自述文件添加到文件夹的每个子文件夹上以将它们压缩为RAR存档文件?

例子:

@ECHO OFF 
for /D %%f in ("C:\directory_with_files_you_want_to_compress\ *") do copy "C:\directory_with_readme.txt\readme.txt" "%%f\" 
cd C:\directory_with_files_you_want_to_compress 
SET PATH=C:;C:\Program Files (x86)\WinRAR;C:\Windows\system32;C:\Windows;C:\Win dows\System32\Wbem;%PATH% 
FOR /f "delims=" %%d IN ('DIR /B') DO WinRAR a -m0 -ep -df -v100m -x*.rar "C:\where_you_want_to_save_new_rar_files\%%~nxd.ra r" "%%~fd" 
EXIT 

但它不添加readme.txt到RAR文件。

回答

0

这很容易实现,因为控制台版本Rar.exe以及GUI版本WinRAR.exe支持在命令行上指定的多个文件或目录添加到相同的存档文件中。

@echo off 
for /D %%D in ("C:\directory_with_files_you_want_to_compress\*") do "%ProgramFiles(x86)%\WinRAR\Rar.exe" a -cfg- -ep -idq -m0 -x*.rar -v100m "C:\where_you_want_to_save_new_rar_files\%%~nxD.rar" "%%~fD\" "C:\directory_with_readme.txt\readme.txt" && rd /Q /S "%%~fD" || echo/ && pause 

同上更易于阅读:

@echo off 
for /D %%D in ("C:\directory_with_files_you_want_to_compress\*") do (
    "%ProgramFiles(x86)%\WinRAR\Rar.exe" a -cfg- -ep -idq -m0 -x*.rar -v100m -y "C:\where_you_want_to_save_new_rar_files\%%~nxD.rar" "%%~fD\" "C:\directory_with_readme.txt\Readme.txt" 
    if not errorlevel 1 (
     rd /Q /S "%%~fD" 
    ) else (
     echo/ 
     pause 
    ) 
) 

批处理代码使用控制台版本Rar.exe,而不是GUI版本WinRAR.exe,因为完全没有必要使用GUI版本用于此存档文件创建任务。

开关-df通过的RAR删除所有压缩文件是因为readme.txt删除不应自动的RAR处理的第一个子目录后删除。该文件也必须添加到其他档案文件以为其他子目录创建。相反,命令RD用于删除已成功处理的子目录。在创建的RAR存档等错误已经存在并且被写保护时,将输出一条空行,并且echo/和处理将以pause停止。

交换机-idq被添加到运行Rar在安静模式下,导致只输出错误。

开关-m0-v100m导致只是存储,而不是真正压缩每个子目录中的所有文件到每卷100 MB的多卷RAR存档。因此,这个批处理文件显然用于将已压缩的存档,音频,图像或视频文件打包成多卷存档。

交换机-y被添加到自动可能的提示是的

所有开关均记录在文本文件Rar.txtWinRAR程序文件文件夹中。

%%~fD后添加一个反斜杠在有人的情况下,也不要使用此代码与开关-ep1代替-ep,并添加开关-r递归归档的每个子目录,而无需子目录名称添加到存档了。使用的交换机仅存档每个子目录中的文件,但不存档其子目录,尽管在创建多卷RAR存档后完全删除了已处理的子目录。

又见对问题的答案:

相关问题