รับชื่อไฟล์เปล่าซ้ำในพร้อมท์คำสั่ง


15

ฉันวิ่งเข้าไปในอุปสรรค์เล็ก ๆ น้อย ๆ พยายามที่จะได้รับชื่อไฟล์เท่านั้น (ไม่มีส่วนขยายหรือเส้นทางไฟล์) ซ้ำซึ่งทำงานให้ฉันในโฟลเดอร์ราก:

dir /b

แต่เมื่อฉันเพิ่ม / s เพื่อสแกนแบบเรียกซ้ำฉันยังมีพา ธ ไฟล์ก่อนชื่อไฟล์ที่ฉันไม่ต้องการ มีวิธีการรับชื่อไฟล์เปล่าจากโฟลเดอร์ย่อยทั้งหมดในไดเรกทอรีหรือไม่?

ฉันใช้ Windows 7 x64 ฉันควรใช้พรอมต์คำสั่งปกติไม่ใช่ PS หรือ VBS

คำตอบ:


13

ใช้คำสั่งต่อไปนี้:

dir /b /a /s
  • / b แถบวันที่และรายละเอียดอื่น ๆ จากผลลัพธ์
  • / a ส่งออกชื่อไฟล์เท่านั้นไม่มีเส้นทาง
  • / s เปิดใช้งานรายการไดเรกทอรีแบบเรียกซ้ำ

หากคุณต้องการบันทึกผลลัพธ์ไปยังไฟล์คุณสามารถใช้:

dir /b /a /s >> list_of_names.txt

แก้ไข ที่จริงการแก้ปัญหาข้างต้นไม่ถึงเป้าหมายของคำถามเดิม สิ่งหนึ่งที่ฉันสังเกตเห็นได้จากคำถามคือโพสต์ขอให้มีการเรียกรายการซ้ำ ซึ่งคำตอบอื่นไม่มีดังนั้นฉันคิดว่าการเพิ่ม "/ s" ในคำตอบของผู้ตอบคนอื่นจะทำเคล็ดลับ

for /f %a in ('dir /b /s') do @echo %~na

คุณอธิบายเรื่องนี้ได้ไหม สำหรับฉันมันทำให้รู้สึกเล็กน้อย
Simon Sheehan

4
สิ่งนี้ใช้ไม่ได้ / a ไม่ทำงานอย่างนั้น - เป็นตัวกรองไฟล์ที่คุณต้องการแสดงรายการ ไม่ได้ตัดเส้นทางจากชื่อไฟล์เมื่อทำรายการไดเรกทอรีแบบเรียกซ้ำ
3498DB

แก้ไขคำตอบ; และเพิ่งได้รับกล่อง windows อีกครั้งฉันคิดว่าเวลานี้ควรทำ (win732bit)
Nik So

5

ลองสิ่งนี้:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานและประเภทการทำงาน for /?


เกือบจะใช้งานได้ แต่มีปัญหาใหญ่มันจะส่งออกคำแรกของชื่อไฟล์เท่านั้นหากชื่อไฟล์นั้นเป็นตัวอย่างเช่น "ภาพวันหยุดพักผ่อนของฉัน 1" แล้วมันจะส่งออกเฉพาะ "ฉัน"
TMRW

ลองนี้: สำหรับ / f "delims = |" % a ใน ('dir / b') ทำ @echo% ~ na โดยค่าเริ่มต้นพารามิเตอร์ / f ของ FOR จะโทเค็นในช่องว่าง การตั้งค่าโทเค็นเป็นอักขระที่ไม่ควรปรากฏในชื่อไฟล์ / ไดเรกทอรีจะให้ชื่อทั้งหมดรวมถึงช่องว่าง
Scott McKinney

2
for /r %i in (*) do @echo %~ni

หรือ

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

สมมติว่าไฟล์ noquotes.bat ในของคุณ %เส้นทาง% กับเนื้อหานี้

@echo %~1

สำหรับ / r วิธีการอธิบาย

for /r เดินไดเรกทอรีปัจจุบันซ้ำ (คุณสามารถระบุไดเรกทอรี for /r drive:\path\ไดเรกทอรีปัจจุบันจะถือว่า) และดำเนินการคำสั่งที่ระบุโดยทำสำหรับแต่ละไฟล์ที่ตรงกับในชุด (*). การตั้งค่า (.) จะจับคู่ไดเรกทอรีเท่านั้น @echo% ~ ni คำสั่งนี้ทำงานตามที่เป็นอยู่จากพร้อมต์ เพิ่มราคาของคุณเป็นสองเท่าถ้าคุณใส่ไว้ในไฟล์แบตช์ นั่นคือ for /r %%i in (*) do @echo %%~ni

อธิบายถึงวิธีการ forfiles

/s แจงนับไดเรกทอรีปัจจุบันและทั้งหมด
/c รันคำสั่งภายในเครื่องหมายคำพูด
@isdir และ @fname เป็นสัญลักษณ์ที่ปล่อยออกมาในสตริงคำสั่ง
ไฟล์แบตช์พิเศษ noquotes.bat ช่วยด้วยการลอกเครื่องหมายคำพูดคู่ด้วย% ~ 1 (พารามิเตอร์ 1)
forfiles ยังช่วยให้คุณระบุเส้นทางที่จะเริ่มต้น forfiles /P C:\Windows ...


@ David โพสต์ใช่มันเป็นคำตอบที่ไม่ดี ขอบคุณสำหรับความคิดเห็นของคุณ โปรดแจ้งให้เราทราบหากฉันสามารถปรับปรุงคำตอบของฉันเพิ่มเติมได้
JJS

@DavidPostill คุณไม่มีคำตอบหรือความคิดเห็นก่อนหน้านี้ คุณเป็นผู้ดูแลคำถามหรือมองหาคำตอบและสะดุดกับคำตอบที่มีคุณภาพต่ำของฉันหรือไม่
JJS

คำตอบของคุณปรากฏขึ้นในคิวการตรวจสอบ "โพสต์คุณภาพต่ำ" อย่างที่ฉันรู้มากเกี่ยวกับแบทช์ไฟล์ฉันจึงปิดมัน
DavidPostill

@DavidPostill ขอบคุณสำหรับความคิดเห็นของคุณ ฉันยินดีให้คุณตรวจสอบการเปลี่ยนแปลงที่ฉันทำกับคำตอบของฉัน
JJS

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