ฉันจะแยกไฟล์เก็บถาวรหลายไฟล์ที่มีอยู่ในไดเร็กทอรีย่อยในโฟลเดอร์ได้อย่างไรส่งออกผลลัพธ์กลับไปยังโฟลเดอร์ที่เก็บถาวร
ฉันจะแยกไฟล์เก็บถาวรหลายไฟล์ที่มีอยู่ในไดเร็กทอรีย่อยในโฟลเดอร์ได้อย่างไรส่งออกผลลัพธ์กลับไปยังโฟลเดอร์ที่เก็บถาวร
คำตอบ:
สร้าง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
กลับไปยังไดเรกทอรีก่อนหน้าซึ่งเราเก็บไว้ในหน่วยความจำก่อนหน้านี้
หวังว่านี่จะเป็นประโยชน์กับใครบางคน
ฉันมีปัญหาในการเรียกใช้สคริปต์จาก 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 อยู่ในระดับเดียวกับสคริปต์ พวกเขาควรจะลดลงหนึ่งระดับ
ฉันหวังว่าความคิดเห็นนี้ช่วยใครบางคน
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
เริ่มต้นการค้นหาแบบเรียกซ้ำที่ไดเร็กทอรีปัจจุบันค้นหาไฟล์ทั้งหมดที่ลงท้ายด้วย. zip แล้วไพพ์ไปยังลูป สำหรับทุกไฟล์ที่พบมันรันคำสั่ง unzip บนไฟล์ที่มีเอาต์พุตแบ่งไปยังไดเร็กทอรีของไฟล์
อย่างไรก็ตามคำตอบข้างต้นใช้ได้ผลถ้าคุณกำลังใช้งาน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
)