file - 使用密码对一组文件进行打包 (WinRAR)

标签 file batch-file rar winrar

我会尽量缩短这个时间。我正在寻找一个 .bat 文件来 rar 和密码文件夹中的文件,但问题比我想象的要棘手一些,每个文件夹中可以包含 1 到 400 个文件,我有两个 .txt文件,一个具有所需数量的 .rar 文件名,一个具有所需数量的 .rar 密码,因此 txt 文档看起来像这样,第一个是 filenames.txt :

FAD01    
FAD02    
FAD03

等等直到FAD110
和另一个 .txt 文件
GAP01
GAP02
GAP03
GAP04
GAP05

等等直到GAP50
第一个密码 .txt 文件看起来像这样
vF2RiQMof6HSWy8MSEIO
13qIsZ7e9RIzBwaQ3UO6
KfTMk9wPfPQKMNh4XzD8

以此类推,共110个随 secret 码

像这样的第二个密码 .txt 文件
al9p4O2vkiqcFKfgpWh7
U0jkx05nQoTKPAAPEYiW
43bliny0TU2R4CKob62H

以此类推,共50个随 secret 码

我想要做的是将 .txt 文档中的 50 个文件名的第一个列表应用于位于主文件夹中的 50 个子文件夹,以及用于每个 .rar 创建的 50 个密码的第一个列表,所以我的结局结果将是 > 在第一个主文件夹内 50 个 rars 每个密码不同,我还希望 .rar 文件密码被加密,因此除非您输入密码,否则您看不到任何 .rar 文件的内容。

最终结果如下所示:
FAD01.rar > password = vF2RiQMof6HSWy8MSEIO
FAD02.rar > password = 13qIsZ7e9RIzBwaQ3UO6
FAD03.rar > password = KfTMk9wPfPQKMNh4XzD8

等等直到FAD110.rar
如果他们认为他们可以做到,我愿意付钱给他们,或者如果您只是喜欢挑战并且有一颗大心脏,那也没关系:) 并感谢您花时间阅读我的问题

额外信息

我创建了文件名和密码列表来帮助生成带密码的 rar 文件的过程,但是如果您可以在不需要预定义密码/文件名列表的情况下执行此操作,那么工作量就会减少,但我需要某种文件由 .bat 文件创建的名称/密码列表,所以我知道什么 .rar 有什么密码。

这些列表很容易生成,所以我希望 bat 文件可以一次读取 1 行列表并将文件名和密码应用于要压缩的文件夹

基本上,我正在寻找它来获取一组文件夹并以某种形式的字母顺序将它们单独打包,并对 rar 应用随 secret 码(这些密码应为 20 个字符长,包含数字和大写/小写字母),但我想要 rar 加密,这是 winRAR 中的一个选项,它阻止用户看到 rar 的内容,直到输入密码

50 到 300 个文件夹,每个文件夹包含大量文件,文件夹需要使用随机加密密码进行加密和密码,我目前一次做 1 个,确实非常耗时

最佳答案

假设这个目录结构:

\
└─SomeRootFolder
  ├─SuperfolderA
  │ ├─filenames.txt
  │ ├─passwords.txt
  │ ├─A1
  │ │ └─...
  │ ├─A2
  │ │ └─...
  │ └─...
  ├─SuperfolderB
  │ ├─filenames.txt
  │ ├─passwords.txt
  │ ├─B1
  │ │ └─...
  │ ├─B2
  │ │ └─...
  │ └─...
  └─...

(子文件夹 A1A2 ,... B1B2 ,... 需要放入自己的文件中),以下对我有用:
@ECHO OFF
SET arch="C:\Program Files (x86)\WinRAR\WinRAR.exe"
SET "rootdir=D:\path\to\folders"
SET "namestxt=filenames.txt"
SET "passtxt=passwords.txt"

FOR /D %%D IN ("%rootdir%\*") DO (
  <"%%D\%passtxt%" (
    FOR /F "usebackq delims=" %%N IN ("%%D\%namestxt%") DO (
      SET /P "pass="
      SETLOCAL EnableDelayedExpansion
      %arch% a -r -ep1 -hp!pass! "%%D\%%N.rar" "%%D\%%N"
      ENDLOCAL
    )
  )
)

第一部分只是设置一些变量,稍后在脚本中使用。 (碰巧的是,它们每个都只在脚本中使用一次,因此您可以轻松替换相应变量扩展的值。我只是习惯性地声明这些变量,我经常在批处理脚本中使用这样的变量。)

外环,FOR /D一,迭代你的“ super 文件夹”,那些包含要存档的子文件夹和文本文件。

循环体以这种方式读取两个文件:
  • filenames.txt由内循环指令本身读取,FOR /F命令;
  • 密码文件由内部循环体中的命令之一读取,即 SET /P . SET /P读取标准输入流,默认情况下它是控制台,但在这种情况下,标准输入被重定向到整个内部循环来自 passwords.txt反而。

  • 所以,%%D循环变量(外循环的)包含“ super 文件夹”的完整路径,%%N被分配了一个子文件夹的名称和 pass=设置为相应的密码。此时只剩下调用归档程序。

    这些归档程序命令行中使用的参数:
  • a – 适当的 Add 命令(与 Extract 等命令相反,即 x 或 Update,即 u );
  • -r – 递归处理指定的文件夹(如果不需要,请删除此选项);
  • -ep – 从名称中排除基本文件夹;
  • -hp… – 使用指定的密码加密存档(这与 -p… 不同,后者仅保护提取;-hp 不会让您在没有密码的情况下看到存档的内容,就像您想要的那样)。

  • 可以看到,在调用归档器之前,延迟扩展是启用的。如果您不知道带括号的命令块(包括循环体)中“立即”扩展的影响,我只会说,如果变量在相同的括号块。因此延迟扩张。它使用 ! s 而不是 % s,您可以看到 pass变量以这种方式扩展。

    还有一件事需要提及。如果您生成的密码少于其他文件中的名称,脚本仍然可以正常工作,但缺少“自己”密码的名称将与列表中的最后一个密码配对。 (如果名称少于密码,脚本也没​​有问题。在这种情况下,将不会使用“孤立”密码。)

    更新

    如果您想直接从目录中读取子文件夹名称,则放弃 filenames.txt文件,您可以像这样更改脚本:
    @ECHO OFF
    SET arch="C:\Program Files (x86)\WinRAR\WinRAR.exe"
    SET "rootdir=D:\path\to\folders"
    SET "namestxt=filenames.txt"
    SET "passtxt=passwords.txt"
    
    FOR /D %%D IN ("%rootdir%\*") DO (
      <"%%D\%passtxt%" (
        FOR /D %%N IN ("%%D\*") DO (
          SET /P "pass="
          SETLOCAL EnableDelayedExpansion
          %arch% a -m0 -r -ep1 -hp!pass! "%%N.rar" "%%N"
          ENDLOCAL
        )
      )
    )
    

    更新 2

    如果要生成filenames.txt动态读取目录中的名称的文件,只需在第一个脚本的外循环中插入一个命令:
    @ECHO OFF
    SET arch="C:\Program Files (x86)\WinRAR\WinRAR.exe"
    SET "rootdir=D:\path\to\folders"
    SET "namestxt=filenames.txt"
    SET "passtxt=passwords.txt"
    
    FOR /D %%D IN ("%rootdir%\*") DO (
      DIR /AD /B "%%D" >"%%D\%namestxt%"
      <"%%D\%passtxt%" (
        FOR /F "usebackq delims=" %%N IN ("%%D\%namestxt%") DO (
          SET /P "pass="
          SETLOCAL EnableDelayedExpansion
          %arch% a -r -ep1 -hp!pass! "%%D\%%N.rar" "%%D\%%N"
          ENDLOCAL
        )
      )
    )
    
    /AD DIR的开关确保只包含文件夹名称。

    请注意,您可以以类似的方式生成密码。如果有一个命令接受输出文件名作为参数并且不中断地完成工作,您可以在 DIR 之后插入该命令。 .

    关于file - 使用密码对一组文件进行打包 (WinRAR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12796665/

    相关文章:

    ubuntu - rar包不可用..?

    c - C shell 中的错误文件描述符问题

    android - FileOutputStream 什么也不做(Android Studio)

    java - 通过两个不同的按钮播放两个不同的声音文件?

    batch-file - 如何使用call命令替换for循环中的多个字符串-替换%是一个问题

    batch-file - Windows 批量 Lame 编码语法

    java - 从特定单词后开始读取文件

    windows - cmd 中 For 循环的属性列表

    php - 将 .rar 文件解压到 php 中的特定目录

    java - 资源适配器存档 (RAR) 是否与 Roshal 存档 (RAR) 相同?