Pindahkan File ke Sub-Direktori yang Didaftar Secara Abjad

6

Saya memiliki berbagai "file" (bukan folder) dengan jenis yang sama (misalnya " .docx"), di direktori yang sama.

Juga, dalam direktori SAMA, saya memiliki sub-direktori bernama " catalog", dan dalam hal itu, folder abjad (yaitu, dimulai dengan #, A, B, C, D, E, F, dan seterusnya ...).

Dengan asumsi file ini terletak di " D:/documents/", bagaimana [Menggunakan Windows CMD, atau Windows Powershell] akan saya menyortir daftar file, dan memindahkan mereka ke dalam "katalog" folder, menjadi [case yang tepat sensitif ] "Abjad" folder , menyortir berdasarkan huruf pertama [ tidak sensitif huruf ] dari nama file mereka?

Misalnya: [ D:/documents/janet_henderson.docx] akan pindah ke [ D:/documents/catalog/J/janet_henderson.docx]

Harap dicatat bahwa saya perlu memiliki file dengan nama yang dimulai dengan nomor apa saja yang masuk ke D:/documents/catalog/#/folder " ".


Apa yang saya miliki sejauh ini

Saya memiliki yang berikut dalam sebuah organize_files.batfile:

move  documents\A*.docx  documents\catalog\A\
move  documents\B*.docx  documents\catalog\B\
move  documents\C*.docx  documents\catalog\C\
move  documents\D*.docx  documents\catalog\D\
move  documents\E*.docx  documents\catalog\E\
move  documents\F*.docx  documents\catalog\F\
move  documents\G*.docx  documents\catalog\G\
move  documents\H*.docx  documents\catalog\H\
move  documents\I*.docx  documents\catalog\I\
move  documents\J*.docx  documents\catalog\J\
move  documents\K*.docx  documents\catalog\K\
move  documents\L*.docx  documents\catalog\L\
move  documents\M*.docx  documents\catalog\M\
move  documents\N*.docx  documents\catalog\N\
move  documents\O*.docx  documents\catalog\O\
move  documents\P*.docx  documents\catalog\P\
move  documents\Q*.docx  documents\catalog\Q\
move  documents\R*.docx  documents\catalog\R\
move  documents\S*.docx  documents\catalog\S\
move  documents\T*.docx  documents\catalog\T\
move  documents\U*.docx  documents\catalog\U\
move  documents\V*.docx  documents\catalog\V\
move  documents\W*.docx  documents\catalog\W\
move  documents\X*.docx  documents\catalog\X\
move  documents\Y*.docx  documents\catalog\Y\
move  documents\Z*.docx  documents\catalog\Z\
  • Apakah ada cara yang lebih baik untuk menyelesaikan operasi ini seperti meletakkannya dalam satu lingkaran mungkin?
  • Bagaimana cara saya merawat file yang dimulai dengan angka?
  • Apakah saya harus memberi tahu Windows CMD tidak peka huruf besar-kecil, saat memeriksa nama file?
James Anderson Jr.
sumber
1
Kami bukan layanan penulisan skrip. Kami berharap pengguna memberi tahu kami apa yang telah mereka coba sejauh ini (termasuk skrip yang mereka gunakan) dan di mana mereka macet sehingga kami dapat membantu dengan masalah tertentu. Pertanyaan yang hanya meminta skrip terlalu luas dan cenderung ditunda atau ditutup . Silakan baca Bagaimana saya mengajukan pertanyaan yang bagus? .
DavidPostill
Dengan move a*.docx catalog\aAnda harus dapat memindahkan semua file dimulai dengan a. Salin dan lewati baris ini dalam file teks bernama moveall.bat26 kali dan modifikasi dengan tangan untuk setiap huruf kemudian jalankan ... atau cari beberapa kode di internet dan cobalah untuk memodifikasinya.
Hastur
Apakah sudah SEBELUM Anda menyebutkannya. Periksa jawabanku. :-)
James Anderson Jr

Jawaban:

4

Mengatur File ke dalam Sub-Direktori yang Diurutkan menurut Abjad

Misalnya: [ D:/documents/janet_henderson.docx] akan pindah ke [ D:/documents/catalog/J/janet_henderson.docx]

Juga, Catatan: Saya berharap jelas bahwa file yang memiliki nama file dimulai dengan nomor masuk ke "D:/documents/catalog/#/"folder.

Berdasarkan pada bagaimana Anda menjelaskan ini dan contoh Anda, di bawah ini adalah beberapa contoh perintah, salin dan tempel item prompt, dan item skrip batch yang akan menyelesaikan tindakan ini seperti yang Anda jelaskan.

Asumsi

  • Semua katalog berhuruf dan #direktori sudah akan dibuat.
  • Untuk dua contoh pertama di bawah ini Anda tidak akan PERNAH MOVEfile yang sama dengan nama yang sama ke direktori di mana file dengan nama SAMA sudah ada.
  • Untuk dua contoh terakhir di bawah ini Anda akan SELALU menimpa file yang sudah ada dengan perintah MOVEdari sumber ke destintion jika file yang sama dengan nama SAMA sudah ada.

Command Prompt Copy (prompt jika file sudah ada)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %A IN %Letters% DO MOVE "%SourceDir%\%~A*.*" "%DestLetterDir%\%~A\"
FOR %B IN %Numbers% DO MOVE "%SourceDir%\%~B*.*" "%DestNumDir%\"
GOTO EOF

Batch Script (prompt jika file sudah ada)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %%A IN %Letters% DO MOVE "%SourceDir%\%%~A*.*" "%DestLetterDir%\%%~A\"
FOR %%B IN %Numbers% DO MOVE "%SourceDir%\%%~B*.*" "%DestNumDir%\"
GOTO EOF

Salinan Prompt Perintah (paksa ditimpa)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %A IN %Letters% DO ECHO Y | MOVE "%SourceDir%\%~A*.*" "%DestLetterDir%\%~A\"
FOR %B IN %Numbers% DO ECHO Y | MOVE "%SourceDir%\%~B*.*" "%DestNumDir%\"
GOTO EOF

Skrip Batch (force overwrite)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %%A IN %Letters% DO ECHO Y | MOVE "%SourceDir%\%%~A*.*" "%DestLetterDir%\%%~A\"
FOR %%B IN %Numbers% DO ECHO Y | MOVE "%SourceDir%\%%~B*.*" "%DestNumDir%\"
GOTO EOF

Bacaan Lebih Lanjut dan Sumberdaya

Pimp Juice
sumber
1
Bekerja dengan sempurna!
James Anderson Jr
1
Naskah yang bagus. Sebuah pertanyaan: Tidak berfungsi jika Anda meletakkan variabel OverWrite="/Y "atau OverWrite="/-Y "(atau kosong) dan kemudian Anda menulis MOVE %OverWrite .... ? (Saya kecanduan Linux) ;-)
Hastur
@Hastur Terima kasih, untuk MOVEperintahnya, FORbaris juga bisa FOR %A IN %Letters% DO MOVE /Y "%SourceDir%\%~A*.*" "%DestLetterDir%\%~A\"atau FOR %A IN %Letters% DO MOVE /-Y "%SourceDir%\%~A*.*" "%DestLetterDir%\%~A\". Saya pikir saya meletakkan ECHO Yalih - alih /Ykebiasaan menggunakan XCOPYperintah lebih dari MOVEtetapi dua cara harus bekerja juga jadi berikan mereka kesempatan tanpa ECHO Y |.
Pimp Juice IT
@PimpJuiceIT Mengapa Anda membutuhkan GOTO EOFperintah terakhir?
PeterCo
1
@PeterCo Itu hanya kebiasaan saya kira tetapi dalam kasus ini saya percaya GOTO :EOFtidak akan ada bedanya. Saya menempatkan itu di luar kebiasaan saya pikir ketika saya menulis jawaban itu. Setelah itu tidak ada salahnya dalam hal ini, tetapi dalam beberapa kasus ketika Anda membuat CALLlabel ke lain, Anda dapat menggunakan GOTO :EOFdan itu akan memastikan begitu rutin yang Anda sebut selesai, itu akan melewati kontrol kembali ke logika di mana pernah panggilan terakhir tinggalkan jika begitulah alur logika skrip batch seharusnya bekerja.
Pimp Juice,