เหตุใดตัวอักษร D จาก /D ตัวเลือกของคำสั่ง FOR หายไปในเอาต์พุต

ฉันกำลังสร้างแบตช์ไฟล์เพื่อลบไฟล์และโฟลเดอร์ทั้งหมด ยกเว้นโฟลเดอร์ TEMP ฉันสังเกตเห็นตัวอักษร D ของตัวเลือก /D หายไปในเอาต์พุต ดูเหมือนว่าสคริปต์จะทำงานได้ดี แต่ฉันสงสัยว่าทำไมมันถึงหายไป

@echo on
@Y:
REM Following dangerous command commented out for safety - magoo
REM for %%f in (*) do del "%%f"
for /D %%d in (*) do (
    if /I not "%%d" == "TEMP" echo "%%d"
)
pause

เอาท์พุท:

Y:\>for %f in (*) do del "%f"

Y:\>for / %d in (*) do (if /I not "%d" == "TEMP" echo "%d" )

Y:\>(if /I not "TEMP" == "TEMP" echo "TEMP" )

Y:\>(if /I not "test" == "TEMP" echo "test" )
"test"

Y:\>(if /I not "test 2" == "TEMP" echo "test 2" )
"test 2"

Y:\>pause

ฉันกำลังสะท้อนเพียงเพื่อการทดสอบ ในที่สุดฉันจะแทนที่มันด้วย rd /S /Q


person user3315073    schedule 17.08.2019    source แหล่งที่มา
comment
เอาชนะฉัน - แต่ระบบของฉันก็ทำแบบเดียวกัน   -  person Magoo    schedule 17.08.2019
comment
เป็นอันตรายหรือไม่เพราะสามารถลบไดรฟ์ Y ทั้งหมดได้? ฉันจะแก้ไขมันได้อย่างไร?   -  person user3315073    schedule 17.08.2019
comment
อย่างแน่นอน! สมมติว่าคุณไม่มีไดรฟ์ Y: อักษรระบุไดรฟ์จะยังคงไม่เปลี่ยนแปลง ดังนั้นคุณจะเรียกใช้คำสั่งนั้นจากไดเร็กทอรีปัจจุบันบนไดรฟ์ปัจจุบันของคุณ จะปลดอาวุธได้อย่างไร? หลายวิธี การลบคำสั่งอย่างสมบูรณ์ เปลี่ยน 'del' เป็น echo ตรวจสอบว่าไดรฟ์ปัจจุบันเป็น Y จริง ๆ:   -  person Magoo    schedule 17.08.2019
comment
การเปลี่ยนไดรฟ์ Y: ไม่ได้หมายถึงการเปลี่ยนไปยังไดเร็กทอรีราก แต่จริงๆ แล้วจะมีไดเร็กทอรีปัจจุบันสำหรับทุกไดรฟ์ คุณสามารถทำ cd/D "Y:\" || exit /B 1 เพื่อเปลี่ยนเป็นรูทของ Y: อย่างแน่นอน และยังปิดในกรณีของ ข้อผิดพลาด (เช่น เมื่อไม่มี Y:) หรือใช้ pushd/popd...   -  person aschipfl    schedule 17.08.2019
comment
ขอบคุณ. แทนที่ Y: ด้วย cd/D "Y:\" || exit /B และเพิ่มการตรวจสอบว่ามีโฟลเดอร์ TEMP อยู่หรือไม่   -  person user3315073    schedule 17.08.2019
comment
ตราบใดที่ยังใช้งานได้ ฉันควรเพิกเฉยต่อความจริงที่ว่าตัวอักษร D ไม่ปรากฏหรือไม่   -  person user3315073    schedule 17.08.2019
comment
ความจริงที่ว่าตัวอักษร D ไม่แสดงดูเหมือนจะเป็นข้อบกพร่องที่ทราบในล่ามแบบแบตช์ของ Windows (แต่ฉันไม่พร้อมที่จะใช้ Google เพื่อหาทรัพยากรที่ผ่านการรับรอง) เพียงเพิกเฉยและเรียกใช้สคริปต์ของคุณโดยใช้ @echo OFF...   -  person JosefZ    schedule 17.08.2019
comment
ข้อผิดพลาดที่น่าสนใจ (แต่ไม่เป็นอันตราย?) หากคุณรวม /D กับ /R ระบบจะแสดงเครื่องหมายทับเพียงอันเดียวโดยไม่มีตัวอักษร ทุกรูปแบบที่ไม่มี /D echo อย่างถูกต้อง @JosefZ - ข้อผิดพลาดที่รู้จัก? - คุณมีข้อมูลอ้างอิงหรือไม่? ฉันอยากรู้ว่ามันพูดว่าอะไร   -  person dbenham    schedule 18.08.2019
comment
@dbenham ฉันพบพฤติกรรมนี้ อย่างน้อย >4 ปีที่แล้วที่ ไฟล์แบตช์สำหรับลูป /D flag ไม่ปรากฏ ในบรรทัดคำสั่ง … โปรดทราบว่า ยังคงค้นหาคำอธิบาย กลอสอยู่ที่นั่น (ยังใช้ได้ :) ระบบปฏิบัติการของฉันในสมัยนั้นคือ Windows XP และฉันไม่สังเกตเห็นการร้องเรียนใดๆ เกี่ยวกับฟังก์ชัน FOR /D ใน .bat/.cmd เนื่องจาก...   -  person JosefZ    schedule 18.08.2019