Windows เทียบเท่ากับ ls * (เครื่องหมายดอกจัน) ไดเรกทอรีสัญลักษณ์แทน?


14

อีกคำถามจากผู้ใช้ Unix / Linux ที่พบตัวเองในโลก Windows มาเป็นเวลานาน ก่อนอื่นให้ฉันอธิบายสิ่งที่ฉันพยายามจะทำ ฉันใช้เชลล์ cmd.exe ของ Windows และฉันต้องการแสดงรายการไดเรกทอรีทั้งหมดด้านล่างไดเรกทอรีปัจจุบันที่มีลำดับชั้นของ bin \ Debug และตรวจสอบว่าพวกเขามีไฟล์ใด ๆ (เช่น: พยายามที่จะคิดออกว่าเป้าหมายสะอาดของฉันคือ ทำงานอย่างถูกต้อง) ลำดับชั้นของฉันอาจมีลักษณะเช่นนี้:

\Current
    \DirA
         \bin
             \Debug
                  (some files under debug)
             \Release
    \DirB
         \bin
             \Debug
    \DirC
         \bin
             \Release

ใน Unix ls */bin/Debugฉันจะให้รายชื่อของทุกอย่างในDirA/bin/Debugนั้นและแสดงให้ฉันเห็นว่าDirB/bin/Debugมันว่างเปล่า ฉันได้ลอง contortions ที่แตกต่างกันใน cmd shell, แต่ก็ยังคงมีเรื่องต่อไปนี้:

    > dir * \ bin \ Debug
    ชื่อไฟล์ชื่อไดเรกทอรีหรือไวยากรณ์ฉลากปริมาณไม่ถูกต้อง

    > dir * \ * \ *
    ชื่อไฟล์ชื่อไดเรกทอรีหรือไวยากรณ์ฉลากปริมาณไม่ถูกต้อง

มีบางอย่างที่ฉันไม่เข้าใจเกี่ยวกับคำสั่ง dir หรือว่ามันถูก จำกัด ด้วยวิธีนี้หรือไม่?

ใช่ฉันรู้ว่าฉันสามารถสลับไปที่ explorer นำทางคลิกขวาและในที่สุดก็สามารถสร้างการค้นหาที่ทำในสิ่งที่ฉันต้องการได้ แต่ฉันสนใจวิธีแก้ปัญหาบรรทัดคำสั่งแบบด่วน


ในขณะที่มันเป็นเรื่องดีที่ได้ทราบเกี่ยวกับเครื่องมือที่เหมือนยูนิกซ์ทั้งหมดที่ฉันสามารถเพิ่มลงใน Windows (และเชื่อว่าฉันใช้ Cygwin ที่บ้าน!) ฉันจะไม่สามารถใช้งานได้ทุกที่ที่ไป (แน่นอนอาจไม่มีสิทธิ์ของผู้ดูแลระบบในการ ติดตั้งลงในพีซีทุกเครื่องที่ฉันใช้)
Ogre Psalm33

คำตอบ:


13

สิ่งนี้ควรทำในสิ่งที่คุณต้องการ ที่ไดเรกทอรีรูทของประเภทโครงการ:


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

อาร์กิวเมนต์ Dir: / s - แบบเรียกซ้ำ, / b - "bare", ไม่มีข้อมูลเพิ่มเติม
อาร์กิวเมนต์ findstr: / i - ละเว้นกรณี

โดยทั่วไป ' คำสั่ง help ' จะแสดงวิธีใช้คำสั่งเชลล์ หากไม่ได้ผลให้
' command /?' โดยทั่วไปจะแสดงความช่วยเหลือ


ยอดเยี่ยม ฉันรู้ว่ามีเครื่องมือ / ชุดเครื่องมือมากมายเพื่อช่วยฉัน "linuxize" Windows ของฉัน แต่ฉันกำลังมองหาวิธีที่จะทำสิ่งที่ฉันพยายามจะทำกับ Windows และนี่คือสิ่งที่แน่นอน!
Ogre Psalm33

7

Windows ไม่ใช้สัญลักษณ์แทนวิธีที่ Linux ทำ เฉพาะส่วนของชื่อไฟล์เท่านั้นที่สามารถมีอักขระตัวแทนได้

คุณสามารถดาวน์โหลดเวอร์ชันของ ls ที่ทำงานบน Windows และใช้งานได้ ฉันเคยใช้Cygwinแต่ฉันแน่ใจว่ามีคนอื่น


นอกจากนี้ PowerShell
Joel Coehoorn

3
สิ่งอื่นที่ควรทราบ: ใน wildcard ของ Windows จะถูกขยายโดยคำสั่งไม่ใช่โดยเชลล์
ลอเรน Gonsalves

2

unxutilsมีคำสั่ง ls อย่างไรก็ตามปัญหานี้เกิดขึ้นกับ windows shell จริงๆ ในยูนิกซ์เชลล์ของคุณจะขยาย*/bin/Debugเข้าไปในชื่อพา ธ ที่เกี่ยวข้องและป้อนไปยังคำสั่ง ls เป็นอาร์กิวเมนต์บรรทัดคำสั่งแยกต่างหาก

Cygwin แน่นอนจะทำเคล็ดลับสำหรับคุณหรือคุณอาจจะลองใช้พอร์ตหน้าต่างของยูนิกซ์เปลือกเช่นทุบตี หากคุณต้องการใช้เส้นทางสคริปต์คุณสามารถเขียนโค้ดบางอย่างในไพ ธ อนได้อย่างง่ายดายโดยใช้โมดูล globและภาษาสคริปต์อื่น ๆ ส่วนใหญ่มีความเทียบเท่า


2

คุณสามารถทำอะไรเช่น "dir / s * .obj * lib" มันจะให้ข้อมูลสรุปในตอนท้ายของจำนวนไฟล์ที่ตรงกัน


ปิด. ฉันให้อุปกรณ์ประกอบฉากแก่คุณ แต่คำตอบของเจมส์นั้นใกล้กว่าเพราะมันกรองไฟล์ที่ไม่อยู่ภายใต้ \ debug ให้ฉัน
Ogre Psalm33

2
@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

ไม่ดี แต่ควรใช้งานได้ คุณอาจใส่ลงในไฟล์. cmd (จากนั้นแทนที่ทุก% เดียวเป็นสอง%%) หรือกำหนดแมโครโดยใช้ doskey (ใช่มันยังมีอยู่)

ตรวจสอบให้แน่ใจว่าเปิดใช้งานส่วนขยาย cmd แล้ว

แก้ไข:มันทำงานอย่างไร:

ครั้งแรกสำหรับการวนซ้ำวนซ้ำผ่านไดเรกทอรีย่อยทั้งหมด (/ D และ / r สวิตช์) ซ้ำ ๆ กัน % ~ fP ขยายไปยังเส้นทางแบบเต็มของไดเรกทอรีนั้น จากนั้นมันจะผนวก \ bin \ Debug * กับเส้นทางนั้น ที่สองสำหรับการวนรอบระบุไฟล์ทั้งหมดที่ตรงกัน % ~ ftzaQ ถูกขยายไปทุกไฟล์ที่ตรงกันและพิมพ์ไปที่หน้าจอโดย echo รูปแบบที่แปลกประหลาด% ~ ftzaQ จัดรูปแบบเหมือนกับเอาต์พุต dir อักขระ @ หลีกเลี่ยงการพิมพ์คำสั่งบนหน้าจอ

ดูเพิ่มเติมที่


ฉันลองมันและมันใช้งานได้จริง แต่การที่ไม่มีประสบการณ์ใน cmd shell ฉันยังไม่เข้าใจเลย :-)
Ogre Psalm33

0

ใน Windows world cmd.exe ไม่ได้ขยาย wildcards - พวกเขาได้รับการส่งผ่านตามที่เป็นไปยังโปรแกรมในบรรทัดคำสั่งหรืออาร์เรย์ argv ดังนั้นแต่ละโปรแกรมจะแยกวิเคราะห์และขยายให้แตกต่างกันและโดยทั่วไปแล้วการใช้งานขั้นสูงบางอย่าง (เช่นที่คุณมองหา) จะไม่ได้รับการสนับสนุน

ข้อเสนอแนะของ timgilbert ในการใช้ Cygwin เป็นสิ่งที่ดีแพคเกจ GNUWin32อาจมีบางอย่างที่จะช่วยคุณได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.