CMD Her dosya için klasör oluşturma ve dosyayı klasöre taşıma komutu


10

Bir dizinde her dosya (dosya adına göre) için bir klasör oluşturmak ve daha sonra yeni oluşturulan klasörlere dosya taşımak için komut satırından çalıştırılabilir bir komut gerekir.

Misal :

Başlangıç ​​Klasörü:

Dog.jpg
Cat.jpg

Aşağıdaki komut, geçerli çalışma dizinindeki her dosya adı için bir klasör oluştururken harika çalışır.

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

Sonuç Klasörü:

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

Bu bir adım daha ileri götürmek ve dosyayı klasöre taşımak gerekir.

Ne elde etmek istiyorum:

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

Birisi bana tüm bunları yapmak için tek bir komutla yardımcı olabilir mi?

Yanıtlar:


10

İkinci komut

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

DÜZENLEME: and31415 yorumuna dayanarak% i için "" eklendi. tnx.


4
Bundan sonra A) onları birleştirebilir- for %i in (*) do cmda && cmdb B) ilk yankı yapabilirdi for %i in (*) do @ECHO cmda && cmdb C) ekleyebiliriz / alt dizinlerden gitmek için / R olduğunu düşünüyorum.
barlop

2
Dosya adları boşluk içerdiğinde bu komut çalışmaz. Bunun gibi bir şey kullanmalısınız: for %i in (*) do move "%~i" "%~ni"Hedef klasör mevcut olmadığında yan etkileri olabileceğinden bu bile yeterince iyi olmayabilir (örneğin, dosyalar kendi üzerlerine "taşınır", bu nedenle yeniden adlandırılır). Her iki komutu da birleştirmek kolay bir çözüm olabilir: for %i in (*) do md "%~ni" && move "%~i" "%~ni"Komut, dizinlerin zaten mevcut olmadığını varsayar.
and31415

2
Kullandığınızda Ayrıca, barlop yorumuna genişletmek için cmda && cmdbdaha sonra cmdbyalnızca çalıştırılacaktır cmdabaşarılı oldu. cmda & cmdbBunun yerine kullanacak olsaydınız, ikinci komut ne olursa olsun yürütülür. Aslında, tek bir ve işareti ( &) bir komut ayırıcı ve çift işareti (adildir &&) bir olduğu koşullu bir. Bir errorleveldeğer ayarlamayan komutlar , ikincisi ile birlikte kullanılmamalıdır.
and31415

5

Şu komutları seri olarak uygulamanız yeterlidir:

Her dosya için klasör oluşturmak için:

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

Her dosyayı kendi klasörüne taşımak için:

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

1
Süper Kullanıcıya Hoş Geldiniz! Bu, başka bir yanıtı çoğaltır ve yeni içerik eklemez. Katkıda bulunacak yeni bir şeyiniz yoksa lütfen yanıt göndermeyin.
DavidPostill

-1

Bunun gibi bazı klasörleriniz varsa bunu yapar: example years \ Filename.mp4

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

tüm klasör 1. düzey dosyaları listeler; tüm * .mp4 ve * .mkv dosya adıyla 2 düzeyli klasörler oluşturur ve 1. düzey klasördeki tüm aynı ad dosyalarını 2. düzey klasöre taşır ve yıl taban klasöründe çalıştırır.

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

1. düzey YEARS klasörünüz yoksa, ilk adımı atlayıp 2. adımı çalıştırabilirsiniz, dosya adı temel klasöründe çalıştırın.

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

&&, dosyaların taşınmasını çalıştırmak için önceki mkdir% ERRORLEVEL% değerinin 0 olmasını sağlar

Test etmek için şunu kullanın:

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

Sol dosyaları bulun: (*) içindeki / d% D için (% ~ fD \ *)% i için yapın "% ~ dpi% ~ fi"
Olívio Moura

/ d% D in (*) için% i in (% ~ fD \ *) için hareket et "% ~ fi" "D: \ TRASH \"
Olívio Moura
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.