การใช้ไฟล์แบตช์เพื่อไฟล์ zip เป็นไฟล์ zip แต่ละไฟล์


10

ดังนั้นฉันจึงพยายามใช้ 7zip ในแบตช์ไฟล์เพื่อนำไฟล์ในโฟลเดอร์และ zip เป็นไฟล์เดี่ยว ๆ ดังนั้นไฟล์แรกจะได้รับเป็นไฟล์ zip ของตัวเองและไฟล์ถัดไปเป็นต้น ฉันกำลังมองหาบนอินเทอร์เน็ตและลองรหัสที่แตกต่างกัน จนถึงตอนนี้ฉันสามารถจัดการให้ซิปเป็นไฟล์ zip เดียวและส่งออกไปยังเดสก์ท็อปของฉันได้สำเร็จ

น่าเสียดายที่ฉันทำรหัสที่หายไปและตอนนี้ฉันติดอยู่กับสิ่งที่ดูเหมือนจะไม่ทำอะไรเลย

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

ฉันต้องการให้แต่ละไฟล์มีไฟล์ zip ของตัวเองและสำหรับไฟล์ zip ที่จะแชร์ชื่อของไฟล์ลบส่วนขยายของหลักสูตร

ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก


นอกจากนี้หากมีวิธีที่ง่ายกว่าในการทำเช่นนี้โดยใช้คุณสมบัติ zip builtin บน Windows 10 ซึ่งก็ใช้ได้เช่นกัน
Mike Van Dunk

คำตอบ:


4

ฉันต้องการให้แต่ละไฟล์มีไฟล์ zip ของตัวเองและสำหรับไฟล์ zip ที่จะแชร์ชื่อของไฟล์ลบส่วนขยายของหลักสูตร

Batch Script

(ตั้งค่าพา ธ ของโฟลเดอร์ที่ชัดเจนแบบเต็มต้นทางและปลายทางขึ้นด้านบนจากนั้นเรียกใช้ตามต้องการต้นทางคือตำแหน่งที่มีไฟล์ที่คุณต้องการซิปและปลายทางคือตำแหน่งที่คุณต้องการให้ซิปเหล่านั้นอยู่)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

บรรทัดคำสั่ง

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

แหล่งข้อมูลเพิ่มเติม


3

สคริปต์ต้นฉบับของคุณทำสิ่งต่อไปนี้แบบต่อบรรทัด:

@echo on

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

cd "C:\Users\MVD21\Desktop\test"

Cแฮงค์Dไดเรกทอรีเป็นสิ่งที่ฉันหวังว่าเป็นเส้นทางที่คุณต้องการ zip ไฟล์ทั้งหมด

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

พารามิเตอร์ไปที่นี่ก็คือIN (C:\Users\MVD21\Desktop\test)ซึ่งจะทำให้เกิดห่วง "ร่างกาย" (การกระทำที่อยู่เบื้องหลังคำหลักDO) จะได้รับการดำเนินการครั้งว่ามีพารามิเตอร์ที่ได้รับมอบหมายค่า%i C:\Users\MVD21\Desktop\testไม่แปลกใจเลยที่นี่จะไม่ทำสิ่งที่คุณต้องการ! ดูเหมือนว่าจะทำให้ไดเรกทอรีทั้งหมดเป็นไฟล์. 7z ไฟล์เดียว

ถ้ามันไม่ทำอะไรเลยมันอาจเป็นเพราะมันหาเส้นทาง7z.exeไม่ได้ หากไฟล์นั้นไม่อยู่ในไดเรกทอรีปัจจุบัน ( testไดเรกทอรีดังกล่าวข้างต้น) ไฟล์นั้นจะต้องอยู่ในPATH(ใน%PATH%ตัวแปรสภาพแวดล้อมลองecho %PATH%ใช้เชลล์เพื่อดูว่าไฟล์นั้นตั้งค่าเป็นอะไรในปัจจุบัน) มิฉะนั้นคุณต้องคัดลอก7z.exeไปยังไดเรกทอรีปัจจุบันหรือระบุเส้นทางที่แน่นอนไปยังที่ตั้ง (เช่นเช่น"C:\Program Files\7-zip\7z.exe" ...)

pause

เมื่อสคริปต์เสร็จสิ้นคำหลักนี้จะบอกให้เชลล์รอให้คุณกด Enter หรือปิดพรอมต์คำสั่งแทนที่จะออกทันที


เมื่อคุณสร้างสคริปต์ชุดงาน (หรือแน่นอนสิ่งอื่นใดที่เกี่ยวข้องกับรหัส) คุณควรหยุดการปฏิบัติสคริปต์ทั้งหมดเป็นสำเนาเสาหินวางที่คุณไม่ (พยายาม) เข้าใจและแทนที่จะทำลาย ปัญหาในส่วนย่อยที่คุณสามารถคิดออกเป็นรายบุคคลแล้วขอพวกเขาเข้าด้วยกัน สิ่งนี้จะช่วยให้คุณสามารถแก้ปัญหาได้อย่างอิสระและสร้างวิธีการแก้ปัญหาแทนการขอให้คนอื่นทำงานทุกอย่างให้คุณ ฉันขอแนะนำอย่างยิ่ง

ในกรณีของคุณคุณมีส่วนประกอบย่อยของปัญหาของคุณดังต่อไปนี้:

  1. ทำซ้ำ (วนซ้ำ) แต่ละไฟล์ที่อยู่ในไดเรกทอรีที่กำหนด
  2. สำหรับแต่ละไฟล์ที่กำหนดวางไว้ในไฟล์. 7z โดยเรียกใช้7zยูทิลิตี้

โอกาสของคนที่มีคำตอบอยู่ตรงนั้นแล้วซึ่งจะแก้ปัญหาความต้องการเฉพาะของคุณน้อยกว่าโอกาสที่จะสามารถหาชิ้นส่วนที่กว้างกว่าได้ทีละคน

คำถามนี้ 'วิธีทำบางอย่างกับแต่ละไฟล์ในไดเรกทอรีในชุดสคริปต์'แก้ปัญหาครึ่งหนึ่งของคุณ

แรงขับของคำตอบคือคุณเพิ่งเริ่มด้วยส่วนนี้จากคำตอบของ StackOverflow:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

และเปลี่ยนส่วนหนึ่งที่จะได้ทำอะไรบางอย่าง (คนecho %%f) ที่จะทำในสิ่งที่คุณต้องการจะทำ ฉันรู้ว่าคุณต้องเปลี่ยนส่วนนั้นเพราะฉันวิเคราะห์ข้อความของสคริปต์และเข้าใจความหมายของตัวละครและพารามิเตอร์แต่ละตัวดังนั้นฉันจึงสามารถให้เหตุผลเกี่ยวกับตำแหน่งที่ฉันต้องการแทรกรหัสของตัวเอง

นี่คือ "รหัสอากาศ" (ยังไม่ทดลอง!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

@echo onและpauseงบดังกล่าวเป็นวิธีปฏิบัติที่ดีเพื่อให้คุณสามารถเก็บไว้ใน. และคุณอาจจะต้องการที่จะเก็บไว้ที่cdงบเกินไปหากไฟล์ของคุณจะอยู่ในเส้นทางที่

แล้วอะไรล่ะที่จะทิ้งเราไว้?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

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

  • สิ่งที่แน่นอนคุณไม่ได้รับข้อผิดพลาดในพร้อมรับคำสั่งเมื่อคุณเรียกใช้คำสั่งเหล่านี้หรือใส่ไว้ในไฟล์ชุดและเรียกพวกเขา? อย่าย่อ; คัดลอกและวางผลลัพธ์โดยตรง (วางบนhttp://pastebin.comหากมีมาก)
  • คุณคิดว่าข้อความแสดงข้อผิดพลาดกำลังบอกคุณว่าปัญหาคืออะไร
  • การติดตั้ง 7-zip ของคุณอยู่ที่ไหน (เส้นทางของไฟล์)?
  • ตำแหน่งไฟล์ของการติดตั้ง 7-zip ของคุณรวมอยู่ในเนื้อหาของPATHตัวแปรสภาพแวดล้อมหรือไม่? (ตรวจสอบสิ่งนี้ตามที่กล่าวไว้ข้างต้นด้วยecho %PATH%ในcmdทันที)

ฉันไม่คิดว่ามันจะใช้งานได้เพราะฉันติดตั้ง 7zip ไว้ในไดรฟ์อื่นหรือไม่ ดูเหมือนว่าจะทำงานถ้าฉันทำ cd "สถานที่ตั้งของ 7zip" ในคำตอบเดิม แน่นอนว่าใช้งานได้ "บางครั้ง" เท่านั้น มันใช้งานได้จนกว่าฉันจะใส่คำสั่ง echo อีกอันไว้ข้างใต้และตอนนี้ก็ยังไม่เสร็จ และใช่ฉันพยายามทำความเข้าใจเพิ่มเติมเกี่ยวกับแบตช์ไฟล์ ฉันพยายามค้นหาคำศัพท์ชุดคำสั่งแบตช์หรือสิ่งที่ไม่ควรศึกษาดังนั้นฉันจึงเข้าใจจริง ๆ เชื่อใจฉันฉันอยากจะเข้าใจและให้มันทำงานได้มากกว่าแค่ใช้งาน
Mike Van Dunk

ฉันลองวิธีการแก้ปัญหาของคุณและฉันไม่สามารถบอกคุณได้ว่าผลลัพธ์คืออะไรเพราะไฟล์แบทช์ไม่ทำงานเลย มันเปิดสั้น ๆ ด้วยหน้าต่าง cmd เพิ่งกระพริบแล้วปิดอีกครั้ง ใช่ฉันมีการหยุดชั่วคราว ฉันมี 7zip ติดตั้งอยู่บนไดรฟ์ในตัวและในไดรฟ์ภายในตัวที่สอง แต่ดูเหมือนว่าจะไม่ได้เป็นส่วนหนึ่งของสภาพแวดล้อมของเส้นทาง
Mike Van Dunk

ฉันอยากจะเข้าใจจริงๆ แต่การค้นหา google ไม่ได้ช่วยอะไรมาก ตัวอย่างเช่นฉันไม่รู้ว่าคำสั่งหรือพารามิเตอร์ "'dir / b" นั้นคืออะไรหรือกำลังทำอะไรอยู่ ฉันรู้ว่า dir เห็นได้ชัดว่าเป็นไดเรกทอรี แต่ฉันไม่รู้ว่า / b สิ่งที่ฉันต้องการสำหรับใครบางคนที่จะอธิบายสิ่งที่พารามิเตอร์กำลังทำอยู่เพื่อให้ฉันสามารถเข้าใจได้ดีขึ้น หรือถ้าใครบางคนมีลิงค์ไปยังเว็บไซต์ที่พวกเขาไปสิ่งนี้จะเป็นประโยชน์เช่นกัน ฉัน googled 'dir / b ในแบทช์ไฟล์และหาอะไรไม่เจอจริงๆ ฉันคิดว่า / b มีบางอย่างเกี่ยวข้องกับชื่อไฟล์ แต่ฉันไม่แน่ใจ
Mike Van Dunk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.