สคริปต์ต้นฉบับของคุณทำสิ่งต่อไปนี้แบบต่อบรรทัด:
@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 หรือปิดพรอมต์คำสั่งแทนที่จะออกทันที
เมื่อคุณสร้างสคริปต์ชุดงาน (หรือแน่นอนสิ่งอื่นใดที่เกี่ยวข้องกับรหัส) คุณควรหยุดการปฏิบัติสคริปต์ทั้งหมดเป็นสำเนาเสาหินวางที่คุณไม่ (พยายาม) เข้าใจและแทนที่จะทำลาย ปัญหาในส่วนย่อยที่คุณสามารถคิดออกเป็นรายบุคคลแล้วขอพวกเขาเข้าด้วยกัน สิ่งนี้จะช่วยให้คุณสามารถแก้ปัญหาได้อย่างอิสระและสร้างวิธีการแก้ปัญหาแทนการขอให้คนอื่นทำงานทุกอย่างให้คุณ ฉันขอแนะนำอย่างยิ่ง
ในกรณีของคุณคุณมีส่วนประกอบย่อยของปัญหาของคุณดังต่อไปนี้:
- ทำซ้ำ (วนซ้ำ) แต่ละไฟล์ที่อยู่ในไดเรกทอรีที่กำหนด
- สำหรับแต่ละไฟล์ที่กำหนดวางไว้ในไฟล์. 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
ทันที)