สำหรับการวนซ้ำในไฟล์แบตช์ไม่ย้ายไฟล์


1

ฉันวนลูปผ่านไดเรกทอรีเฉพาะและหากไฟล์ zip หรือไฟล์มีอยู่พวกเขาจะถูกย้ายไปยังโฟลเดอร์ที่สองในไดเรกทอรีนั้น แต่รหัสด้านล่างดูเหมือนจะไม่ทำงานนั่นคือมันไม่ย้ายไฟล์ ผมทำอะไรผิดหรือเปล่า?

for %%i in (D:\test\*.*) do if %%~xi == ".zip" move /Y "D:\test\%%~ni%%~xi" "D:\test\complete"

คำตอบ:


3

เมื่อเปรียบเทียบนามสกุลไฟล์ให้ใส่นามสกุลของไฟล์ปัจจุบันลงในเครื่องหมายคำพูดเช่น:

for %%i in (D:\test\*.*) do if "%%~xi" == ".zip" move /Y "D:\test\%%~ni%%~xi" "D:\test\complete"

ฉันทดสอบและใช้งานได้ดี

หากต้องการใช้รูทีนย่อยให้ลองสิ่งนี้:

for %%i in (D:\test\*.*) do call :checkextension %%i

:checkextension
if "%~x1" == ".zip" move /Y "%~1" "D:\test\complete"
goto:eof

โปรดสังเกตว่าพา ธ ของแต่ละไฟล์ ( %%i) ถูกส่งผ่านเป็นพารามิเตอร์ไปยัง:checkextensionรูทีนย่อยซึ่งเข้าถึงมันเป็น%~1(หรือ%~x1เมื่อต้องการเฉพาะส่วนขยาย)


ที่ได้ผล ขอบคุณมัด จำเป็นต้องใช้เครื่องหมายคำพูดหรือไม่ ประการที่สองฉันพยายามสร้างรูทีนย่อยดังต่อไปนี้for %%i in (D:\test\*.*) call :checkextension :checkextension if "%%~xi" == ".zip" move /Y "D:\test\%%~ni%%~xi" "D:\test\complete"แต่มันไม่ทำงาน
PeanutsMonkey

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