如何压缩包含N个文本文件的N号子文件夹的文本文件?

时间:2016-01-04 12:59:27

标签: batch-file batch-processing rar winrar

下面是一个目录结构,我必须将app*子目录中的所有* .txt文件压缩到一个RAR存档中,其中包含当前日期的名称,并删除已存档的文件和文件夹。

我在处理命令行和编写批处理脚本方面是全新的,只知道一些基础知识。

有关如何使用 Rar WinRAR 解决此任务的建议吗?

E: 
Data 
    Log
    makeRar.bat
        app1
            1.txt
            2.txt
            3.txt
            .
            .
            .
            n.txt
        app2
            1.txt
            2.txt
            3.txt
            .
            .
            .
            n.txt
        app3
            1.txt
            2.txt
            3.txt
            .
            .
            .
            n.txt
        .
        .
        .
        appn
            1.txt
            2.txt
            3.txt
            .
            .
            .
            n.txt

-----------执行makeRar.bat文件后-------------

E: 
Data 
    Log
    makeRar.bat
        app1
            4/1/2016_log.rar
        app2
            4/1/2016_log.rar
        app3
            4/1/2016_log.rar

3 个答案:

答案 0 :(得分:2)

我有这个问题的答案。但是这个解决方案是使用静态路径,而不是动态路径。因此,当执行此批处理文件时,它会完全按照需要生成输出,但仅根据以下代码生成特定的app文件夹。

set loc="C:\Program Files\WinRAR"
cd /D %loc%
rar.exe a -r -agYYYY-MM-DD -df -ep %source%\app1\log_.rar %source%\app1\*.txt
必须使用源目录的路径定义

source

修改

我通过迭代两个 FOR 循环找到了一个更好的解决方案来完成你的目录结构,其中第一个用于获取当前和子目录,第二个用于从子目录获取文件。

set "source=C:\Program Files\WinRAR"

for /R /D %%s in (.\*) do (
    echo %%s
    for %%F in (%%s\*.txt*) do (
        "%source%\rar.exe" a -r -agYYYY-MM-DD -df -ep %%s\log_.rar %%F
    ) 
)
pause

答案 1 :(得分:1)

根据您提供的信息,这应该有用。如果RAR.exe不在PATH变量的文件夹中,则需要将该路径添加到PATH变量中,或者在批处理文件中提供可执行文件的完整路径。

@echo off

:: Get Date
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET "YYYY=%dt:~0,4%"
SET "MM=%dt:~4,2%"
SET "DD=%dt:~6,2%"


FOR /D %%G IN (app*) DO (
    PUSHD "%%~G"
    rar a %DD%%MM%%YYYY%_log.rar *.txt
    del *.txt
    POPD
)

答案 2 :(得分:1)

WinRAR 的程序文件文件夹中有文本文件Rar.txt,它是控制台版本Rar.exe的手册。通过查看此文件并首先选择要使用的命令 - 此处为{em>添加文件以存档为a - 然后从上到下阅读有关交换机并根据以下内容构建命令行读取时的任务要求使得定义用于将文件压缩到RAR存档的命令行变得非常容易。

@echo off
for /D %%D in (app*) do (
    echo Creating archive for %%D ...
    "%ProgramFiles%\WinRAR\Rar.exe" a -agYYYY-MM-DD -cfg- -df -ep -idq -m5 -md4m -r- -s -y "%%D\log_.rar" "%%D\*.txt"
    if errorlevel 1 pause
)

您可以阅读文本文件Rar.txt中的所有开关。

命令暂停仅在Rar.exe输出到控制台时发生错误,而所有其他消息因切换-idq而被禁止时才会执行。

RAR存档的文件名格式为log_YYYY-MM-DD.rar,因为在目录中有多个此类RAR存档后,这比DD-MM-YYYY_log.rar好得多,因为log_YYYY-MM-DD.rar按照文件的字母顺序显示排序默认情况下,Windows上的名称会导致文件也按日期自动排序,最旧的位于顶部。

Rar 仅删除成功添加到存档的文本文件。

当然也可以使用 WinRAR 进行压缩:

@echo off
for /D %%D in (app*) do (
    echo Creating archive for %%D ...
    "%ProgramFiles%\WinRAR\WinRar.exe" a -agYYYY-MM-DD -cfg- -df -ep -ibck -m5 -md4m -r- -s -y "%%D\log_.rar" "%%D\*.txt"
)

WinRAR 还可以创建ZIP存档,而不是控制台版本 Rar 不支持的RAR存档。

Rar 开关-idq WinRAR 开关-ibck替换为运行 WinRAR 最小化到系统托盘,即在背景中。错误消息显示在GUI窗口中,如果发生错误, WinRAR 会自动显示。

有关与 Rar 开关稍有不同的 WinRAR 命令和开关的帮助,请单击菜单帮助中的 WinRAR 帮助主题上,点击项目命令行模式上的目录标签,然后阅读链接的页面。

要了解使用过的Windows命令及其工作原理,请打开命令提示符窗口,执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?

了解使用 Rar WinRAR 归档文件是多么容易。所有真正需要的是在命令提示符窗口中执行help时列出的有关Windows标准命令的帮助和一点知识。

修改

上述两个批处理文件都要求批处理文件位于包含子目录app*的目录中,并且此目录是当前目录。为了执行此批处理文件,例如当前目录为%SystemRoot%\System32的计划任务,下面的批处理代码会更好:

@echo off
for /D %%D in ("%~dp0app*) do (
    echo Creating archive for %%~fD ...
    "%ProgramFiles%\WinRAR\Rar.exe" a -agYYYY-MM-DD -cfg- -df -ep -idq -m5 -md4m -r- -s -y "%%~fD\log_.rar" "%%~fD\*.txt"
    if errorlevel 1 pause
)

命令 FOR 现在在批处理文件的目录中搜索子目录app*,与当前目录无关。并传递给 Rar 现在是具有完整路径的归档文件的名称,文件名模式*.txt也是完整路径,而不是使用相对于当前目录的路径。

好吧,使用此批处理文件作为计划任务时,应删除行if errorlevel 1 pause