ประมวลผลไฟล์เก็บถาวร zip ซ้ำเพื่อแยกไฟล์ขณะที่ทิ้งรูปแบบเฉพาะของไฟล์


0

UPDATE:ฉันสังเกตเห็นว่ามีหลายคนที่กำลังดูกระทู้นี้ซึ่งทำให้ฉันเชื่อว่าสถานการณ์นี้ไม่ได้หายากนัก อย่างไรก็ตามฉันได้ถามคำถามที่คล้ายกัน / ที่เกี่ยวข้องกับ SO ที่นี่ซึ่งมีวิธีแก้ปัญหาที่เหมาะสมเช่นกันซึ่งอาจแก้ปัญหาได้ในทางที่ดีขึ้น

ในเครื่องที่ใช้ Windows 7 ของฉันฉันมีไดเรคทอรี่ที่เต็มไปด้วยดัมพ์ที่ดาวน์โหลดมาในไฟล์ ZIP ไฟล์เก็บถาวรแต่ละไฟล์มีไฟล์ข้อความไฟล์ PDF และไฟล์ XML น้อยมาก ฉันต้องการแยกเนื้อหาทั้งหมดของไฟล์เก็บถาวร ZIP แต่ละไฟล์ลงในโฟลเดอร์ที่เกี่ยวข้อง (ต้องสร้างขึ้นในระหว่างกระบวนการ) ขณะที่ทิ้ง / ไม่สนใจการแยกไฟล์ PDF หลังจากแตกไฟล์ที่ต้องการจากไฟล์เก็บถาวรแล้วต้องไม่ลบzip ที่ประมวลผล(หรือฉันอยากรู้ว่าฉันสามารถควบคุมมันได้อย่างไรในสถานการณ์ต่าง ๆ )

หากช่วยให้ทราบจำนวนของไฟล์เก็บถาวรในไดเรกทอรีจะอยู่ในช่วง 60k-70k นอกจากนี้ฉันต้องการไดเรกทอรีเอาท์พุทแยกเพราะไฟล์ในไฟล์เก็บถาวรอาจมีชื่อเหมือนกับไฟล์ในไฟล์อื่น

ตัวอย่างเช่น,

  • ฉันมีที่เก็บของฉันทุกคนชอบone.zip, two.zip.. ในการพูดD:\data
  • ฉันสร้างโฟลเดอร์ใหม่สำหรับข้อมูลที่ประมวลผลแล้วพูดว่า D:\extracted
  • ตอนนี้ข้อมูลจากควรจะไปD:\data\one.zip D:\extracted\oneที่นี่ D:\extracted\oneควรสร้างขึ้นโดยอัตโนมัติ
  • ในระหว่างขั้นตอนการบีบอัดข้อมูลที่สมบูรณ์นี้ไฟล์ PDF ที่พบทั้งหมดไม่ควรแตกออกมา (จะถูกละเว้น) ไม่มีจุดในการแยกแล้วลบ
  • (ไม่บังคับ)ควรเก็บรักษาไฟล์บันทึกไว้ที่, พูด,D:\extracted. แนวคิดคือการใช้ไฟล์นี้เพื่อดำเนินการต่อจากที่ถูกทิ้งไว้ในกรณีที่เกิดข้อผิดพลาด
  • (ไม่บังคับ)สคริปต์ควรให้ฉันตัดสินใจว่าฉันต้องการเก็บถาวรแหล่งข้อมูลหรือลบทิ้งหลังจากประมวลผล

ฉันทำการค้นหาเพื่อหาทางแก้ไขแล้ว แต่หาไม่พบ ฉันเจอคำถามสองสามข้อเช่นนี้

  1. ทำการคลายซิปไฟล์ซ้ำ ๆ ที่ไฟล์นั้นอยู่จากนั้นลบไฟล์เก็บถาวร
  2. 7 zip extract วนซ้ำ
  3. เป็นไปได้หรือไม่ที่จะแสดงรายการเนื้อหาไฟล์ zip ซ้ำด้วย 7 zip โดยไม่คลายบีบอัด

แต่พวกเขาก็ไม่ได้ช่วยอะไรมาก (ฉันไม่ใช่มืออาชีพที่ใช้ Windows) ฉันเปิดให้ติดตั้งซอฟต์แวร์ที่ปลอดภัยและโฆษณาฟรีของ บริษัท อื่น (โอเพ่นซอร์ส) เช่น 7-zip

แก้ไข:มีเครื่องมือพร้อมที่จะทำสิ่งที่ฉันต้องการหรือไม่ฉันลองใช้Multi Unpackerแล้ว มันไม่ได้สร้างไดเรกทอรีใหม่มันไม่สามารถละเว้นไฟล์ * .pdf มันก็ช้าที่จะเริ่มต้นด้วยฉันคิดว่ามันเป็นครั้งแรกที่อ่านเอกสารทั้งหมดในแหล่งที่มาก่อนที่จะเริ่มประมวลผลพวกเขา

ขอบคุณล่วงหน้า!


ฉันไม่เห็นวิธีการใด ๆ โดยไม่ต้องใช้ชุดหรือสคริปต์ powerhell เท่าที่ฉันรู้ว่าไม่มีทางออกที่ออกจากกล่องสำหรับสิ่งเช่นนี้
private_meta

@private_meta ขอบคุณสำหรับการตอบกลับของคุณ ตอนนี้ฉันเดาแล้ว แต่มันก็ดีแน่ คุณช่วยชี้ทางให้ฉันในทิศทางที่ถูกต้องสำหรับการเขียน PowerShell สำหรับสิ่งนี้ ฉันเข้าใจว่าการละเว้น PDF ในระหว่างการแยกเป็นสิ่งที่ท้าทายอย่างมากดังนั้นฉันจึงพร้อมที่จะให้สคริปต์ดึงข้อมูลทุกอย่างแล้วลบ PDF
Fr0zenFyr

เกี่ยวข้อง: superuser.com/q/321829/243637
Fr0zenFyr

คำตอบ:


1

แก้ไขคำตอบที่พบที่นี่สคริปต์ PowerShell ชิ้นนี้ควรทำในสิ่งที่คุณต้องการ เพียงบันทึกเป็นไฟล์ที่มีนามสกุล ".ps1" เมื่อเรียกมันให้เรียกมันว่า. /filename.ps1 และมันจะทำการแยกไฟล์ไปยังโฟลเดอร์ต่าง ๆ ให้ทำการลบไฟล์ zip และลบไฟล์ทั้งหมดที่มีนามสกุล. pdf ฉันไม่ได้ทดสอบว่ามันทำงานอย่างถูกต้องกับเส้นทางแบบเรียกซ้ำ แต่ควรทดสอบด้วย

แก้ไข:หากคุณไม่ต้องการให้ลบไฟล์ซิปให้ลบหรือใส่เครื่องหมาย (#) บรรทัดrmdir -Path $_.FullName -Force

ข้อกำหนด: PowerShell, 7-zip และให้คุณตั้งค่าพา ธ 7-zip ในไฟล์

param([string]$folderPath="D:\Blah\files")

Get-ChildItem $folderPath -recurse | %{ 

    if($_.Name -match "^*.`.zip$")
    {
        $parent="$(Split-Path $_.FullName -Parent)";    
        write-host "Extracting $($_.FullName) to $parent"

        $arguments=@("e", "`"$($_.FullName)`"", "-o`"$($parent)\$($_.BaseName)`"");
        $ex = start-process -FilePath "`"C:\Program Files\7-Zip\7z.exe`"" -ArgumentList $arguments -wait -PassThru;

        if( $ex.ExitCode -eq 0)
        {
            write-host "Extraction successful, deleting $($_.FullName)"
            rmdir -Path $_.FullName -Force
            $arguments1="$($parent)\$($_.BaseName)\*.pdf"
            rmdir -Recurse -Path $arguments1
        }
    }
}

ฉันคิดว่าการขอให้คุณช่วยฉันแก้ไขรหัสจากคำตอบเดียวกันคุณเป็นผู้อ่านใจ ฉันจะลองโค้ดนี้และรายงานความคืบหน้าที่นี่ ฉันดีใจจริงๆที่คุณใช้เวลาอ่านคำถามของฉันอย่างรอบคอบและครอบคลุมเกือบทุกด้านของคำถาม
Fr0zenFyr

คุณสามารถใช้เป็นพื้นฐานและปรับเปลี่ยนได้ตามต้องการ ส่วนที่เกี่ยวกับการไม่แยกไฟล์ pdf ในตอนแรกเป็นความท้าทายที่สำคัญฉันไม่คิดว่ามันจะทำงานกับเครื่องมือปกติ
private_meta

นอกจากนี้หากคุณใช้ "param" มากกว่าหนึ่งรายการคุณต้องเรียกพวกเขาเช่นนี้: "./script.ps -folderPath path -delete" และอื่น ๆ สำหรับสวิตช์โปรดอ้างถึงสิ่งนี้
private_meta

ขอบคุณเพื่อนฉันหมวกของฉันให้คุณ สคริปต์นี้สำเร็จเกือบทุกอย่างที่ฉันต้องการ (ยกเว้นไฟล์บันทึก) เนื่องจากไม่มีคำตอบที่ดีไปกว่านี้ฉันจึงยอมรับคำตอบของคุณเป็นคำตอบ โอ้, และ BTW, โดยค่าเริ่มต้น PowerShell ของระบบของฉันไม่อนุญาตให้ฉันเรียกใช้สคริปต์โดยบอกว่ามันถูกปิดการใช้งาน ฉันมีสองตัวเลือกไม่ว่าจะเป็นการลงชื่อสคริปต์หรือดำเนินการset-ExecutionPolicy Unrestrictedใน PowerShell ในฐานะผู้ดูแลระบบ ฉันลองทั้งคู่แล้วก็ใช้งานได้แม้ว่าตัวที่ 1 จะเป็นตัวเลือกที่ดีกว่า แต่อยู่นอกขอบเขตความคิดเห็นนี้เพื่ออธิบายว่าทำไม
Fr0zenFyr

1
หากคุณแทนที่$arguments=@("e",ด้วย$arguments=@("x", ควรรักษาโครงสร้างไดเรกทอรีโปรดทดสอบ เกี่ยวกับการแยกแบบเรียกซ้ำฉันไม่ทราบว่ามันทำงานอย่างถูกต้องหรือไม่ แต่สิ่งที่คุณสามารถทำได้คือให้สคริปต์เรียกตัวเองด้วยไดเรกทอรีใหม่ในกรณีนี้ทุกไดเรกทอรีย่อย หากมีไฟล์ซิปในตำแหน่งรากของโฟลเดอร์ไฟล์จะทำการคลายการบีบอัด ไม่เช่นนั้นมันจะซับซ้อนขึ้นมาก ฉันยังไม่เก่งพอที่จะใช้ PowerShell
private_meta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.