คำสั่ง CMD เพื่อสร้างโฟลเดอร์สำหรับแต่ละไฟล์และย้ายไฟล์ไปยังโฟลเดอร์


10

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

ตัวอย่าง:

โฟลเดอร์เริ่มต้น:

Dog.jpg
Cat.jpg

คำสั่งต่อไปนี้ใช้งานได้ดีในการสร้างโฟลเดอร์สำหรับแต่ละชื่อไฟล์ในไดเรกทอรีการทำงานปัจจุบัน

for %i in (*) do md "%~ni"

โฟลเดอร์ผลลัพธ์:

\Dog\
\Cat\
Dog.jpg
Cat.jpg

ฉันต้องดำเนินการหนึ่งขั้นตอนต่อไปและย้ายไฟล์ไปยังโฟลเดอร์

สิ่งที่ฉันต้องการบรรลุคือ:

\Dog\Dog.jpg
\Cat\Cat.jpg

ใครช่วยฉันด้วยคำสั่งเดียวที่จะทำทั้งหมดนี้ได้ไหม

คำตอบ:


10

คำสั่งที่สองจะเป็น

for %i in (*) do move "%i" "%~ni"

แก้ไข: เพิ่ม "" สำหรับ% i ตามความคิดเห็นของ and31415 TNX


4
ต่อจากนี้ไปฉันจะบอกว่า A) สามารถรวมเข้าด้วยกันได้ - for %i in (*) do cmda && cmdb B) สามารถสะท้อนเสียงแรกfor %i in (*) do @ECHO cmda && cmdb C) สามารถเพิ่มฉันคิดว่ามันเป็น / R ที่จะผ่านย่อย
barlop

2
คำสั่งนี้จะไม่ทำงานเมื่อชื่อไฟล์มีช่องว่าง คุณควรใช้สิ่งนี้: for %i in (*) do move "%~i" "%~ni"แม้ว่ามันอาจจะไม่ดีพอเพราะมันอาจมีผลข้างเคียงเมื่อไม่มีโฟลเดอร์เป้าหมาย (เช่นไฟล์ที่ "ย้าย" อยู่เหนือตัวเองดังนั้นจึงเปลี่ยนชื่อ) ทางออกที่ง่ายคือการรวมทั้งสองคำสั่งเช่นนี้for %i in (*) do md "%~ni" && move "%~i" "%~ni"คำสั่งจะถือว่าไดเรกทอรีไม่มีอยู่แล้ว
and31415

2
นอกจากนี้จะขยายความคิดเห็น barlop เมื่อคุณใช้cmda && cmdbแล้วcmdbจะดำเนินการเฉพาะในกรณีที่cmdaประสบความสำเร็จ หากคุณต้องใช้cmda & cmdbแทนคำสั่งที่สองจะถูกดำเนินการโดยไม่คำนึงถึง ในความเป็นจริงเครื่องหมายเดียว ( &) เป็นเพียงการแยกคำสั่งและเครื่องหมายคู่ ( &&) เป็นเงื่อนไขหนึ่ง คำสั่งที่ไม่ได้ตั้งerrorlevelค่าไม่ควรใช้กับอันหลัง
and31415

5

เพียงรันคำสั่งเหล่านี้เป็นชุด:

สำหรับการสร้างโฟลเดอร์สำหรับแต่ละไฟล์:

for %i in (*) do mkdir "%~ni"

สำหรับการย้ายแต่ละไฟล์ไปยังโฟลเดอร์:

for %i in (*) do move "%i" "%~ni"

1
ยินดีต้อนรับสู่ Super User! เป็นการทำซ้ำคำตอบอื่นและไม่เพิ่มเนื้อหาใหม่ โปรดอย่าโพสต์คำตอบเว้นแต่ว่าคุณมีสิ่งใหม่ที่จะมีส่วนร่วม
DavidPostill

-1

สิ่งนี้จะทำหากคุณมีบางโฟลเดอร์เช่น: example years \ Filename.mp4

1901\Filename.mp4 
1902\Filename.mp4
1903\Filename.mp4

มันจะแสดงรายการไฟล์ทั้งหมดในโฟลเดอร์ระดับที่ 1; รายชื่อทั้งหมด * .mp4 และ * .mkv จะสร้างโฟลเดอร์ 2 ระดับด้วยชื่อไฟล์และจะย้ายไฟล์ชื่อเดียวกันทั้งหมดในโฟลเดอร์ระดับที่ 1 ไปยังโฟลเดอร์ระดับที่ 2 เรียกใช้ที่โฟลเดอร์ฐานปี

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

หากคุณไม่มีโฟลเดอร์ระดับ 1 ปีคุณสามารถข้ามขั้นตอนแรกและเรียกใช้ขั้นตอนที่ 2 ให้รันที่โฟลเดอร์ชื่อไฟล์

for %i in (*.mp4,*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

&& จะทำให้แน่ใจว่า mkdir% ERRORLEVEL% ก่อนหน้านี้คือ 0 เพื่อเรียกใช้การย้ายไฟล์

เพื่อทดสอบใช้สิ่งนี้:

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do echo "%~dpi%~ni" && echo "%~dpi%~ni.*" "%~dpi%~ni\"

ค้นหาไฟล์ที่เหลือ: สำหรับ / d% D ใน (*) ทำเพื่อ% i ใน (% ~ fD \ *) ทำเสียงสะท้อน "% ~ dpi% ~ fi"
Olívio Moura

สำหรับ / d% D ใน (*) ทำเพื่อ% i ใน (% ~ fD \ *) อย่าย้าย "% ~ fi" "D: \ TRASH \"
Olívio Moura
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.