Bagaimana saya bisa meratakan folder di Windows 7, dengan asumsi semua nama file berbeda?

19

Misalnya, katakan bahwa saya memiliki hierarki folder berikut:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Saya ingin melakukan beberapa perintah yang menghasilkan:

Folder1
   File1
   File2
   File3
   File4

atau yang serupa. Saya tidak terlalu terbiasa dengan Windows, jadi saya akan menghargai sedetail mungkin dalam jawabannya.

Der Hochstapler
sumber
Apakah Anda mencari program yang ada untuk melakukan ini untuk Anda, atau sepotong kode (bahasa pemrograman apa) yang melakukan ini?
Matt Ball
@MattBall: Saya mencari cara termudah untuk melakukan ini. Idealnya, ini akan membuka terminal dan memasukkan beberapa perintah. Sekali lagi, saya tidak terlalu berpengalaman dengan Windows, jadi tolong beri tahu saya jika ada cara yang lebih baik. Terima kasih.

Jawaban:

32

Cara termudah yang absolut adalah memasukkan folder root umum dan melakukan pencarian untuk semua file (yaitu mencari *). Ketika semua file ditemukan, tandai semua file, tekan Ctrl + X dan arahkan ke folder root umum lagi. Sekarang tekan Ctrl + V untuk menempelkan semua file ke folder root. Setelah selesai, hapus semua subdirektori.

Saya tidak tahu apakah ini bisa dilakukan sebagai pekerjaan batch.

Henning Klevjer
sumber
1
Saya suka kesederhanaan ini, tetapi saya mencobanya dengan 40k file dan itu membuat proses explorer terhenti.
UpTheCreek
Jawaban komandan total tampaknya lebih mudah bagi saya.
Ev0oD
13

Saya menggunakan pendekatan powershell ini pada akhirnya ketika saya perlu untuk meratakan struktur hierarkis yang besar (dalam kasus saya pngs):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\
UpTheCreek
sumber
Untuk perataan, mungkin Item Pindah lebih cocok?
geisterfurz007 Hentikan kekacauan ini
4

windows exe: http://en.sourceforge.jp/projects/sfnet_flatfolder/

atau AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

atau gunakan Direktori Opus

atau Powershell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

atau Batch (seperti yang disebutkan di atas)

atau pencarian manual, memotong dan menempel seperti yang disebutkan di atas

Ada banyak cara, tergantung pada keterampilan dan kecenderungan Anda, Anda dapat memilih semua ini, dan memperbaiki sesuai dengan kebutuhan Anda.

Anda mungkin memerlukan ini Hapus Direktori Kosong setelah operasi di atas

Vijay
sumber
1
perintah powershell bekerja pendek dan baik
Maxim Yefremov
3

Jika Anda hanya perlu meratakan dir secara manual dari waktu ke waktu, Total Commander sempurna.

Dalam Total Commander: Masuk ke dir Anda, Anda ingin meratakannya. Dalam menu klik Perintah> Tampilan Cabang . Dan Anda melihat semuanya rata, Anda dapat memindahkan / menyalinnya ke folder lain.

Jika Anda perlu sedikit mengotak-atik nama file: Pilih semua file dalam tampilan rata, dalam menu buka File> Alat Multi-Ubah Nama . Di sini Anda dapat menambahkan beberapa info dari jalur ke nama file sebenarnya menggunakan "Ganti nama topeng", Anda hanya perlu menggunakan tag / tombol plugin di sana, fitur cari & ganti dan tombol foolder kecil, yang memungkinkan Anda untuk melakukan beberapa perubahan terakhir ke nama file di editor teks. Mungkin terdengar rumit, tapi benar-benar cara termudah IMO :)

teejay
sumber
Apa itu Komandan Windows? Apakah maksud Anda Total Commander?
UpTheCreek
Tepat :) Sudah menggunakannya selama 10 tahun, nama adalah Windows Commander saat itu. Diedit
teejay
Terima kasih. Baru saja mencobanya. Tidak akan bekerja untuk 40k file kecil :( menghabiskan banyak CPU selama 10 menit kemudian muncul dengan kesalahan berulang 'tidak bisa membuat file'.
UpTheCreek
Penggunaan CPU dan kelambatan tersirat sangat disayangkan tetapi dapat dimengerti :) Kesalahannya adalah sesuatu yang lain .. mungkin penamaan yang buruk, bug komandan total atau hanya ketidakmampuan TC untuk menangani banyak file ini. Saya akan mencoba mengubah nama jumlah file yang lebih kecil terlebih dahulu atau menggunakan versi yang lebih baru dari TC
teejay
@ Teejay, saya harus memancing untuk rincian saran Anda, tetapi akhirnya saya berhasil membuatnya. Saya menggunakan plugin expander2 untuk mengekstrak bagian dari path dan menjadikannya awalan nama file. Anda mungkin ingin menambahkan beberapa detail untuk orang berikutnya. Tx.
killogre
3

Cukup sederhana dengan opsi baris perintah untuk mereka yang tidak cenderung teknis.

  1. Buat file di suatu tempat bernama "flatten.cmd"
  2. Buka file itu di Notepad
  3. Dalam file, tempatkan yang berikut ini:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Ganti "{SourcePath}" dengan folder yang ingin Anda ratakan. Dalam kasus Anda "c: \ Folder1"

  5. Ganti "{Tujuan"} dengan folder yang Anda inginkan. Dalam kasus Anda juga "c: \ Folder1". Kode sekarang akan terlihat seperti:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Buka jendela baris perintah. Dapat melakukan ini dengan beberapa cara, tetapi ini cepat:

    • Klik tombol Mulai
    • Klik Semua Program
    • Klik Aksesori
    • Klik Prompt Perintah
  7. Di jendela baris perintah, ketik:

    cd {folder where you put the flatten.cmd file}
    flatten
    

Dan itu akan melakukannya (Windows 8+) Saya hanya melakukan itu untuk meratakan folder 10.000 file musik. Bekerja seperti pesona.

Anda dapat menemukan opsi untuk utilitas baris perintah UNTUK di https://technet.microsoft.com/en-us/library/bb490909.aspx .

Ed Williams
sumber
1

menggunakan skrip batch (dari atas kepala saya):

Cari perintah FOR

Baris pertama memindahkan semua file dari subdirektori ke root. Yang kedua menghapus sub folder

for /f %f in ('dir "c:\folder\*" /s/b/a-d') do if not %~ff"=="c:\folder" move "%f" "c:\folder"
for /f %f in ('dir "c:\folder\*" /s/b/ad') do if not "%~ff"=="c:\folder" rd /s/q "%f" 
Praha Sangha
sumber
jadi saya harus membuka terminal dan memasukkan perintah-perintah ini, memastikan bahwa saya mengganti 'folder' dengan jalur yang sesuai? Terima kasih.
Jika Anda tidak ingin menulisnya dalam naskah, ya. OTOH .....
Preet Sangha
Bisakah ini digeneralisasikan dan dilampirkan ke tindakan menu konteks? Saya ingin sekali klik kanan pada sebuah file, klik "Ratakan File", kemudian semua file di dalamnya dipindahkan ke tingkat folder. Menghapus folder setelahnya akan menyenangkan juga.
MAW74656
ya itu bisa memasukkannya ke dalam file batch dengan% 1 sebagai nama folder. stackoverflow.com/questions/6162415/…
Preha Sangha
-Mungkin Anda dapat membantu dengan superuser.com/q/552768/59747
MAW74656
1

Hai, Anda juga dapat menggunakan alat xxcopy (www.xxcopy.com), xcopy-nya pada steriods (sort-of). Dengan alat ini Anda dapat "meratakan" file dalam folder menjadi satu folder.

c:> xxcopy / source-folder / flatten / SG

Baca saja tautan ini: http://www.xxcopy.com/xxcopy16.htm

Bersulang.

Broddi RH
sumber