ฉันจะแยกเก็บถาวรทั้งหมดในไดเรกทอรีย่อยของโฟลเดอร์นี้ได้อย่างไร


18

ฉันจะแยกไฟล์เก็บถาวรหลายไฟล์ที่มีอยู่ในไดเร็กทอรีย่อยในโฟลเดอร์ได้อย่างไรส่งออกผลลัพธ์กลับไปยังโฟลเดอร์ที่เก็บถาวร

คำตอบ:


22

ประการแรกการติดตั้ง7-Zip

สร้างbatไฟล์ในรูทของไดเรกทอรีที่มีหลายไดเรกทอรีย่อยที่มีไฟล์เก็บถาวรภายใน จากนั้นวางต่อไปนี้ใน:

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\7-zip\7z.exe" x "%%X"
        )
    popd
)

เปิดตัวค้างคาวและ rar / zips ทั้งหมดจะถูกแยกลงในโฟลเดอร์ที่บรรจุอยู่

มันทำงานอย่างไร

FOR / D / r %% F ใน ("*") DO (

%%Fสำหรับวงที่จะห่วงผ่านโฟลเดอร์ทั้งหมดในไดเรกทอรีปัจจุบันและวางเส้นทางเข้าไปในตัวแปร

pushd% CD%

ใส่ไดเรกทอรีปัจจุบันที่เราอยู่ในหน่วยความจำ

cd %% F

ตั้งค่าโฟลเดอร์จากตัวแปร%%Fเป็นไดเรกทอรีปัจจุบัน

FOR %%X in (*.rar *.zip) DO (

สำหรับไฟล์rarและzipไฟล์ทั้งหมดในโฟลเดอร์ปัจจุบันให้ทำ:

"C:\Program Files\7-zip\7z.exe" x "%%X"

เรียกใช้ 7-zip บนไฟล์ จำเป็นต้องใช้เครื่องหมายคำพูด%%Xเนื่องจากมีชื่อไฟล์บางชื่อที่มีช่องว่างอยู่

popd

กลับไปยังไดเรกทอรีก่อนหน้าซึ่งเราเก็บไว้ในหน่วยความจำก่อนหน้านี้

หวังว่านี่จะเป็นประโยชน์กับใครบางคน


3

ฉันมีปัญหาในการเรียกใช้สคริปต์จาก Windows Vista เมื่อฉันวิ่งรหัสไม่มีอะไรเกิดขึ้น ฉันต้องเป็นผู้ดูแลระบบจึงจะสามารถเรียกใช้สคริปต์ได้ เมื่อฉันคลิกขวาที่ไฟล์. bat และ "run as administrator" มันไม่ทำงานเพราะมันเริ่มด้วยเหตุผลบางประการในโฟลเดอร์ system32 (ถ้าฉันจำได้ถูกต้อง) ในการแก้ปัญหานี้ให้ใช้ตัวแปร Windows Environment (อธิบายไว้ที่นี่: ตัวแปรสภาพแวดล้อมของ Windows )% ~ dp0 เพื่อเปลี่ยนกลับไปยังไดเรกทอรีที่สคริปต์เรียกใช้

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x %%X
    )
popd
)

ตรวจสอบให้แน่ใจว่าไม่มีไฟล์ * .rar หรือ * .zip อยู่ในระดับเดียวกับสคริปต์ พวกเขาควรจะลดลงหนึ่งระดับ

ฉันหวังว่าความคิดเห็นนี้ช่วยใครบางคน


มันใช้ได้ดีสำหรับฉัน ฉันต้องเปลี่ยนเส้นทางไปที่ "C: \ Program Files (x86)" จาก "C: \ Program Files" ขณะที่ฉันใช้งาน 64-bit Win 7
Contango

1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

เริ่มต้นการค้นหาแบบเรียกซ้ำที่ไดเร็กทอรีปัจจุบันค้นหาไฟล์ทั้งหมดที่ลงท้ายด้วย. zip แล้วไพพ์ไปยังลูป สำหรับทุกไฟล์ที่พบมันรันคำสั่ง unzip บนไฟล์ที่มีเอาต์พุตแบ่งไปยังไดเร็กทอรีของไฟล์


1

อย่างไรก็ตามคำตอบข้างต้นใช้ได้ผลถ้าคุณกำลังใช้งานWindows 64-bitและ7-Zip 32-bitเส้นทางที่ถูกต้องC:\Program Files (x86)\7-Zipสำหรับ 7-Zip ด้านล่างเป็นสคริปต์ที่ใช้งานได้สำหรับฉัน

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files (x86)\7-zip\7z.exe" x %%X
    )
    popd
)

หากคุณมี 7zip เวอร์ชัน 64 บิตเส้นทางที่ถูกต้องคือ: "C: \ Program Files \ 7-zip \ 7z.exe" ตามที่ระบุไว้ในคำตอบดั้งเดิม
Rohn Adams
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.