เหตุใดคำสั่ง MOVE ใน DOS จึงใช้รูปแบบสัญลักษณ์แทนอย่างผิดปกติในกรณีนี้


1

ฉันใช้คำสั่ง "ย้าย" ด้วยรูปแบบสัญลักษณ์แทนในพรอมต์ CMD ภายใต้ Windows 7

ในไดเรกทอรีต้นทางของฉันฉันมีไฟล์ต่อไปนี้:

 movie1.avi
 movie1.avi_metadata
 movie2.avi
 movie2.avi_metadata

หากฉันพิมพ์คำสั่งmove source\*.avi destมันจะย้ายทั้งสี่ไฟล์แม้ว่าฉันจะคาดหวังให้ย้ายทั้งสอง*.aviไฟล์เท่านั้นไม่ใช่*.avi_metadataไฟล์

อย่างที่คาดไว้move source\*.a destและmove source\*.av destไม่ย้ายไฟล์ใด ๆ อย่างไรก็ตามเมื่อความยาวของส่วนขยายสำหรับรูปแบบไวด์การ์ดคือ 3 ตัวอักษรมันจะย้ายส่วนขยายทั้งหมดที่เริ่มต้นด้วยอักขระสามตัวแรก

นี่เป็นข้อบกพร่องในคำสั่ง "ย้าย" หรือพฤติกรรมที่คาดหวังและมีการบันทึกไว้ทุกที่หรือไม่?


แก้ไข: John Watts ตั้งข้อสังเกตว่าสิ่งนี้อาจจะทำให้ชื่อไฟล์ "สั้น"

เป็นไปได้ไหมที่จะสั่งคำสั่งในล่าม CMD จะทำงานเฉพาะกับชื่อไฟล์ที่ยาวและไม่สนใจชื่อไฟล์สั้น ๆ ?


2
windows 7 ยังคงสร้างชื่อ 8.3 หรือไม่? เพราะสิ่งเหล่านั้นจะตรงกับ * .avi สำหรับไฟล์ทั้งสี่

อ่า ... ชื่อไฟล์สั้น ๆ ... คุณกัดฉันในก้น ขอบคุณจอห์น BTW ฉันสงสัยว่าใครโหวตสิ่งนี้ มันเป็นคำถามที่ถูกกฎหมาย
Adisak

มันอาจเป็นของ superuser มันเหมาะสมกว่าที่จะย้ายมากกว่า downvote แต่พวกเขาอาจมีตัวแทนไม่เพียงพอ

มันเป็นสิ่งที่ส่งผลกระทบต่อการเขียนโปรแกรม BATCH อย่างแน่นอน ผมไม่ได้แน่ใจว่าจะย้ายไปยังเว็บไซต์ :-( StackExchange ที่แตกต่างกัน
อดิศักดิ์

2
คุณสามารถปิดการใช้งานการสร้างชื่อไฟล์สั้น ๆ เกี่ยวกับ NTFS ใช้ fsutil behavior set disable8dot3 1fsutil: สิ่งนี้มีผลกับไฟล์ที่สร้างขึ้นหลังจากการเปลี่ยนแปลงเท่านั้น
wmz

คำตอบ:


2

คุณสามารถไพพ์ DIR / B ผ่าน FINDSTR เพื่อกรองไฟล์ที่ไม่ต้องการ คุณสามารถประมวลผลผลลัพธ์เหล่านั้นโดยใช้ FOR / F

for /f "eol=: delims=" %F in ('dir /b /a-d source\*.avi^|findstr /lie .avi') do move "source\%F" dest
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.