Pindahkan semua file dari beberapa subfolder ke folder induk

5

Saya biasanya membuka folder induk dan mencari * untuk memilih semua file dalam subfolder, tetapi dalam hal ini, saya memiliki lebih dari 1.000.000 file yang harus saya sortir, sehingga penjelajah saya sering macet ketika mencoba menyalin banyak file melalui GUI. Saya tidak yakin seberapa efektif ini akan melalui command prompt atau file batch, tetapi patut dicoba, saya kira.

Yang perlu saya lakukan adalah membuatnya begitu

|parent
|    |123
|    |    123abc.png
|    |456
|    |    456def.png
|    |789
|    |    789ghi.png

menjadi

|parent
|    123abc.png
|    456def.png
|    789ghi.png

Ya, struktur file aktual saya memiliki 3 karakter pertama dari nama file yang diberikan ke nama folder, jika itu dapat membantu sama sekali dalam menyortir ini.

Wulfre
sumber

Jawaban:

12

Menggunakan UNTUK / R di prompt perintah:

[FOR / R] berjalan ke pohon folder mulai dari jalur [drive:], dan menjalankan pernyataan DO terhadap setiap file yang cocok.

Pertama buat folder pementasan di luar dari folder induk tempat Anda memindahkan file. Ini akan menghindari referensi melingkar yang mungkin.

Dalam kasus Anda, perintahnya akan terlihat seperti ini:

FOR /R "C:\Source Folder" %i IN (*.png) DO MOVE "%i" "C:\Staging Folder"

Jika Anda ingin memasukkan ini ke file batch, ubah %i untuk %%i.

Perhatikan bahwa tanda kutip ganda itu penting, jangan lewatkan semuanya. Mereka memastikan semua nama file yang mengandung spasi ditangani dengan benar.

Setelah langkah selesai, Anda dapat mengganti nama / memindahkan folder pementasan sesuai kebutuhan.

TIP: Jika Anda memiliki ruang untuk membakar hard drive dan waktu di tangan, Anda mungkin ingin bermain aman dan salinan file daripada memindahkannya, kalau-kalau ada sesuatu yang salah. Ubah saja MOVE untuk COPY dalam perintah di atas.

misha256
sumber
+1 yang sangat membantu! Catatan untuk diri sendiri Namun - Gunakan seluruh jalur, jalur relatif tampaknya tidak mengambil lokasi file dalam sub-folder.
bigp
1

Juga gunakan variabel lingkungan %% ~ dpi yang merujuk ke folder file. Anda kemudian dapat menghapus trailing backslash yang kemudian akan mendapatkan folder induk dari file. Di bawah ini tidak hanya itu.

SetLocal EnableDelayedExpansion   
FOR /R "C:\Source Folder" %%i IN (*.png) DO (       
       Set "CurrFile=%%~i"     
       Set "TMPdp=%%~dpi"   
       Set "ParFldr=!TMPdp:~0,-1!"    
       @Echo MOVE "%%~i" "!ParFldr!" ) & REM Delete echo to move. Run to test.

Itu! mengaktifkan Ekspansi Dinamis dan dapat digunakan untuk %% ~ i serta ParFldr. Jadi %% ~ i can be! CurrFldr! Ini sebenarnya akan diperlukan saat pengujian Anda karena beberapa file akan memiliki string Batch tidak akan suka. Dengan tidak suka, maksud saya mereka akan menyebabkan skrip gagal dan keluar. Saya baru saja mengubah semua %% A menjadi %% i untuk kejelasan. Benar-benar tidak ada bedanya jika huruf A digunakan atau huruf kecil i Apa masalahnya secara konsisten menggunakan huruf yang sama di seluruh, jadi saya mengubah setiap %% A menjadi %% i.

Noshad Chaudhry
sumber
Meskipun ini dapat menjawab pertanyaan, hampir tidak mungkin untuk mengatakan karena format yang buruk. Luangkan waktu untuk mengedit jawaban Anda dan membuatnya dapat dibaca. Silakan baca Bantuan penurunan harga .
DavidPostill
1

Ini adalah beberapa kode contoh:

:loop
    for /d %%D in (%1\*) do (move "%%D\*" %1\ && rmdir "%%D")
    SHIFT
    set PARAMS=%1
if not %PARAMS%!==! goto loop

Dengan versi ini Anda menyeret folder dari mana Anda ingin menghapus subfolder ke batch dan itu akan memindahkan semua file dari subfolder ke folder induk. Saya menggunakannya untuk file arsip yang diunduh yang secara acak memiliki atau belum memiliki subfolder. Pikiran Anda, Itu dibuat dengan satu subfolder dalam pikiran, sebagai spesifik untuk kasus saya.

'Shift' adalah untuk pindah ke argumen berikutnya, ketika Anda menyeret banyak subfolder sekaligus pada skrip.

e.g
sumber