2013-04-24 65 views
2

的內容之後我已成功地列出一個ZIP文件的內容高科技菜譜的例子(使用的7-Zip:清單ZIP文件

FOR /F "tokens=* delims=" %%A in ('dir /b /s *.zip') do (7z.exe l -r "%%A" >> listing.txt) 

然而,這只是轉儲出整個目錄ZIP文件到一個文本文件(稱爲listing.txt)的結構。

我只想列出的最高級別的目錄如的目錄名

Example.Zip

7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 

Listing archive: C:\Users\Test\Desktop\7zip\Demo.zip 

-- 
Path = C:\Users\Test\Desktop\7zip\Demo.zip 
Type = zip 
Physical Size = 1252 

    Date  Time Attr   Size Compressed Name 
------------------- ----- ------------ ------------ ------------------------ 
2013-04-24 13:12:26 D....   0   0 Directory Three\Sub Folder One 
2013-04-24 13:13:00 D....   0   0 Directory Three\Sub Folder Three 
2013-04-24 13:12:54 D....   0   0 Directory Three\Sub Folder Two 
2013-04-24 13:12:26 D....   0   0 Directory Two\Sub Folder One 
2013-04-24 13:13:00 D....   0   0 Directory Two\Sub Folder Three 
2013-04-24 13:12:54 D....   0   0 Directory Two\Sub Folder Two 
2013-04-24 13:12:26 D....   0   0 Directory One\Sub Folder One 
2013-04-24 13:13:00 D....   0   0 Directory One\Sub Folder Three 
2013-04-24 13:12:54 D....   0   0 Directory One\Sub Folder Two 
------------------- ----- ------------ ------------ ------------------------ 
            0   0 0 files, 9 folders 

我只會希望文本文件包含:

  • 目錄中的一個
  • 目錄中兩個
  • 目錄中有三個

任何人都可以建議我怎麼能做到這一點?

回答

2

7Z似乎並不具備這種內置的鑰匙,但你可以做一些批處理腳本(在文件名和顯示線斜線這個搜索如果斜線未找到):

7z.exe l -r archive.zip > lines.txt 

@echo off 

setlocal ENABLEDELAYEDEXPANSION 

for /f "tokens=*" %%a in (lines.txt) do (
    set line=%%a 
    set srch=!line:\=! 
    if "!line!" == "!srch!" (
    echo !line! 
) 
) 
+0

這WA這很簡單,可以滿足我的需求。謝謝。 – jacktrader 2017-06-28 15:16:12

0
7z.exe l -r "File.7z" | FINDSTR "[0-9].D....\>" | FIND /V "\" 

使用第一個Findstr我們過濾輸出獲得唯一目錄的列表(「D」屬性)。

第二次查找時,我們從輸出中刪除包含反斜槓(Folder \ Subfolder)的路徑。

如何與拉鍊的量使用它:

@echo off 

(For /R %%# in (*.zip) do (

    Echo File: "%%#" | MORE 

    For /F "Tokens=5,*" %%A in (
     '7z.exe l -r "%%#" ^| FINDSTR "[0-9].D....\>" ^| FIND /V "\"' 
    ) do (
     Set /A "Num+=1" 
     Call Echo %%NUM%%.0: %%B 
    ) 

    Set /A "Num=0" 
    Echo+ 

))>"listing.txt" 

Pause&Exit 

測試結構:接收

Date  Time Attr   Size Compressed Name 
------------------- ----- ------------ ------------ ------------------------ 
2013-04-24 13:02:29 ....A   274   167 ..bat 
2013-04-24 13:02:29 ....A   274    1\2\2.bat 
2013-04-24 13:02:29 ....A   274    a\b\c\c.bat 
2013-04-24 13:12:45 D....   0   0 a\b\c 
2013-04-24 13:12:37 D....   0   0 a\b 
2013-04-24 13:12:33 D....   0   0 a 
2013-04-24 13:12:50 D....   0   0 1\2 
2013-04-24 13:12:24 D....   0   0 1 
------------------- ----- ------------ ------------ ------------------------ 
            822   167 3 files, 5 folders 

輸出:

File: "C:\Users\Administrador\Desktop\Nueva carpeta\x.7z" 

1.0: a 
2.0: 1 
+0

當我運行批處理文件時 - 我得到一個包含'File:'{filename} .zip「的文本文件。你能告訴我關於代幣的'5'的意義嗎? – JHarley1 2013-04-24 11:43:38

+0

該腳本運行良好並打印出好名字,請用另一個例子來解釋文件名問題以瞭解它。標記是由{空格}分隔的字符串(默認情況下),所以對於「5,*」標記,我們將每行分割爲5 + 1個字符串。 6令牌的原因6列,一個:** 2013-04-24 **兩個:** 13:12:24 **三個:** D .... **四個:** 0 **五個:* * 0 **六:** {文件夾名稱} **。然後我將第六個標記打印到文本文件。 – ElektroStudios 2013-04-24 11:57:11

+0

由於某些原因,「原始輸出」沒有「日期」或「時間」 - 是否會導致問題? – JHarley1 2013-04-24 12:06:39