web-dev-qa-db-ja.com

アーカイブからハッシュ値(CRC)とパス名を抽出する

7-Zipを使用して大きな.rarアーカイブ(1.9TB)からデータを正常に抽出しましたが、アーカイブを削除したいと思います。ただし、そうする前に、保存したいパス名と、最も重要なことに、対応する7-ZipファイルマネージャーのCRC列にリストされているCRC値 =。

私が知っているこれを行う唯一の方法は、次のコマンド7z l -slt <archive.Zip>を使用してcmd.exeを使用することです。ただし、この方法は私の目的にはあまり効率的ではありません。一つには、コマンドプロンプトの出力ウィンドウのサイズが制限されています。バッファサイズ(おそらく32766まで)を調整できることは知っていますが、アーカイブには100万を超えるファイルがあります...しかし、さらに問題なのは、このメソッドの出力が次のような形式であるという事実です。私の知る限り、変更することはできず、次のようになります。

Path = -
Folder = -
Size = -
Packed Size = -
Modified = -
Created =
Accessed =
Attributes = -
Encrypted = -
Solid = -
Commented = -
Split Before = -
Split After = -
CRC = -
Host OS = -
Method = -
Version = -
Volume Index = -

私が探しているのは、次のようなファイルごとの出力です。

<CRC> <pathname>

例えば:

60CD248A *Folder1\text1.txt
61CD248A *Folder1\Folder2\text1.txt
62CD248A *Folder1\Folder2\text2.txt

あなたの時間と助けに感謝します。

1
an531

1行のコマンドコードを使用して、コマンドライン出力からCRC行のみを取得できます。

7z l -slt archive.Zip >>"%tmp%\output.txt && type "%tmp%\output.txt"|findstr /b CRC | clip && del /q /f "%tmp%\output.txt"

このコマンドはクリップボード/ Crtl + Cにすべての行の内容を入れますCRC - .....7zコマンドから。

ファイルに保存する場合:

7z l -slt archive.Zip >>"%tmp%\output.txt && type "%tmp%\output.txt"|findstr /b CRC >>"c:\my_folder\my_save_output.txt" && del /q /f "%tmp%\output.txt"

Forループ直接保存CRC-文字列

for /f tokens^=2*^delims^=^ ^-^  %i in ('7z l -slt archive.Zip^|findstr /b CRC')do @echo/%i>>"c:\my_folder\my_save_output.txt"
  • 私の7Zバージョンの出力は次のようになりますCRC = STRINGS、私の場合、区切り文字は次のように変更されます。
for /f tokens^=^2*^delims^=^=^  %i in ('7za l -slt archive.Zip ^| find /i "crc"')do @echo/%i>>"c:\my_folder\my_save_output.txt"

Obs。:1)間に2つのスペースがあります^=^=および%i

delims^=^=%i  --->  delims^=^=^  %i 

Obs。:2)同じことがPathにも当てはまりますが、[〜#〜] crc [〜#〜]パス

Obs。:3)使用されているポータブルバージョンの実行可能ファイルは7za.exeです。別の名前を付けている可能性があります。

1
It Wasn't Me