Command Promp untuk menyalin HANYA gambar dari FOLDER dan SUBFOLDER

Saya ingin tahu apakah mungkin untuk mengatur perintah batch untuk melakukan tindakan ini.

Setelah file .bat dijalankan, SEMUA gambar dari folder dan sub-folder akan disalin ke lokasi saya di desktop.

Contoh: Folder asli terletak: \intranet\file_location\PP Gambar Lengkap (di folder ini akan banyak folder lain dan di folder tersebut akan ada gambar .jpg)

File tujuan akan didasarkan pada desktop.

Jadi saya perlu mengekstrak gambar .jpg dari semua folder dan subfolder.

Jika gambar sudah ada di folder asli, lewati gambar tersebut atau timpa karena skrip akan dijalankan setiap pagi.

Atau haruskah saya mencari perangkat lunak untuk melakukan ini untuk saya?

Kode yang ada:

cd c: 
cd\ 
copy "\\intranet\PP Complete Images\Master Image Folder*.jpg" "C:\Users\username\Desktop\Master Image Folder" 
copy "\\intranet\PP Complete Images*.jpg" 
exit

person Freedox    schedule 17.11.2014    source sumber
comment
Apakah Anda telah menulis kode apa pun sejauh ini yang dapat Anda bagikan?   -  person Fred    schedule 17.11.2014
comment
Ya, tetapi hanya menyalin jika file .jpg berada dalam satu folder: cd c: cd\ copy \\intranet\PP Complete Images\Master Image Folder*.jpg C:\Users\username\Desktop\Master Image Folder copy \\ intranet\PP Gambar Lengkap*.jpg keluar   -  person Freedox    schedule 17.11.2014


Jawaban (4)


Kode Anda yang ada:

cd c: salah. Untuk mengalihkan drive saat ini ke c: gunakan

c:

cd \ berlebihan. Kode Anda yang tersisa menentukan direktori, sehingga direktori saat ini tidak relevan.

Perintah copy pertama Anda memiliki tiga masalah. Master Image Folder*.jpg berarti semua nama file yang dimulai Master Image Folder dan berakhir .jpg. Anda mungkin bermaksud Master Image Folder\*.jpg artinya semua file berakhiran .jpg di ...\Master Image Folder\

C:\Users\username\Deskto... mungkin merupakan kesalahan. Ini adalah jalur literal, jadi direktori sebenarnya adalah C:\Users\username\Deskto... Anda mungkin memerlukan C:\Users\%username%\Deskto... untuk mengganti username saat ini.

Dan kemudian pekerjaan akan berhenti pada pencocokan nama file, jadi Anda akan menekan A untuk menimpa semua atau Anda akan menekan y atau n untuk setiap pencocokan nama.

Perintah copy terakhir Anda tidak memiliki direktori tujuan yang ditentukan.

Anda dapat edit-dalam kode aktual Anda dengan menggunakan tombol edit di bawah jendela teks asli, memotong dan menempelkan kode aktual Anda - menyensor jika perlu, memilih blok kode yang dihasilkan dan menekan tombol {} di atas kotak edit yang mengindentasi setiap baris dengan efek pemformatan dan hilighting kode.

Solusi paling sederhana mungkin adalah dengan menggunakan

xcopy /d /y /s "\\intranet\PP Complete Images\Master Image Folder\*.jpg" "C:\Users\%username%\Desktop\Master Image Folder\" 

yang akan menyalin file yang diperbarui (/d) dengan penimpaan otomatis (/y) dan pemindaian subdirektori (/s) dari nama/mask ke direktori.

Ini akan membuat hierarki direktori yang identik dengan subpohon asli di bawah direktori Master Image Folder destop.

Anda dapat memperluasnya menjadi

for %%a in (
 "\\intranet\PP Complete Images\Master Image Folder"
 "\\intranet\wherever\somewhere"
) do xcopy /d /y /s "%~a\*.jpg" "C:\Users\%username%\Desktop\Master Image Folder\"

untuk melakukan tindakan yang sama pada beberapa subpohon direktori; namun Anda perlu memastikan bahwa direktori tujuan tidak berada dalam subpohon mana pun yang dipilih untuk disertakan dalam daftar di dalam tanda kurung.

Saya menyarankan untuk tidak "meratakan" hasilnya karena jika Anda melakukan itu, apapun.jpg terbaru dari masing-masing subpohon akan berakhir di direktori tujuan Anda, tanpa pemberitahuan bahwa ada banyak yang mungkin berbeda em>apapunversi .jpg.

person Magoo    schedule 17.11.2014
comment
Masalahnya adalah semua gambar di folder dan sub-folder adalah unik jadi saya tidak perlu khawatir untuk menduplikasinya... Masalahnya adalah saya tidak bisa menjalankan file batch di folder bersama jadi itu harus menjadi mesin lokal saya... - person Freedox; 18.11.2014
comment
Saya telah menggabungkan kode untuk ini: @ECHO OFF untuk /r %%f di (\\intranet\PP Gambar Lengkap) lakukan panggilan:copyFile %%f GOTO END :copyFile copy /V %~1 C:\Users\username\ Desktop\test GOTO:EOF :END tetapi saya hanya perlu menarik file .jpg dan itu benar-benar menarik semuanya dan hanya menarik 24 item dari 40k+ gambar - person Freedox; 18.11.2014

Bagaimana kamu menginginkannya?

Bagi saya kurang jelas bagaimana seharusnya hasilnya -- haruskah diratakan atau haruskah juga bersifat hierarkis?

Lihat ini misalnya:

source
    folder-1
        folder-1-1
            image1.jpg
        folder-1-2
            image2.jpg
            cheese.jpg
        image3.jpg
        some_text.txt
    folder-2
        folder-2-1
            image3.jpg
        some_music.mp3
    cheese.jpg
target

Apakah hasilnya pada dasarnya merupakan salinan hierarki yang ditampilkan (tanpa file apa pun selain jpg), atau haruskah berupa hasil datar seperti ini:

source
    ... (see above)
target
    image1.jpg
    image2.jpg
    cheese.jpg
    image3.jpg
    image3.jpg

Bagaimana kamu melakukannya?

Ratakan

Anda dapat menggunakan perintah for DOS untuk menelusuri direktori1 dan membuat fungsi khusus2 untuk menangani file:

@ECHO OFF
for /r %%f in (*.jpg) do call:copyFile %%f
GOTO END

:copyFile
copy /V /-Y %~1 ..\target
GOTO:EOF

:END

Artinya: for setiap %%f dalam daftar *.jpg dari direktori kerja saat ini, jalankan fungsi copyFile. Tombol /r membuat daftar berulang (menelusuri semua subdirektori).

Dalam fungsi tersebut, argumen yang diteruskan ke sana (sekarang dikenal sebagai %~1) diteruskan ke fungsi salin: Salin file ke direktori target yaitu ..\target dalam kasus ini. /V memungkinkan menyalin memverifikasi hasilnya, /-Y memungkinkan meminta izin untuk menimpa file. Lihat copy /?!

Masalah yang sangat besar: Jika Anda memiliki satu atau lebih file di subfolder berbeda dari direktori sumber Anda, yang memiliki nama yang sama (seperti dua cheese.jpg dalam contoh saya), Anda akan kehilangan data!< /kuat>

Jadi, saya tidak akan merekomendasikan pendekatan ini, karena Anda berisiko kehilangan data (kamera digital tidak terlalu kreatif dalam memberi nama gambar!).

Hierarki

Cukup gunakan robocopy:

robocopy /S <sourcedir> <targetdir> *.jpg

/S membuat dan menyalin subfolder juga. Anda juga dapat menggunakan /DCOPY:T untuk membuat direktori memiliki stempel waktu yang sama dengan yang asli atau /L untuk melihat pratinjau tindakan robocopy.

Masalah kecil: Switch /E juga menangani subfolder, meskipun subfolder kosong. /S menangani subfolder juga, tetapi tidak jika subfolder tersebut kosong. Tetapi menanganinya, jika tidak kosong, namun tidak memiliki JPG di dalamnya -- jadi, subfolder tanpa JPG akan menghasilkan folder kosong di folder target.

Robocopy memiliki banyak parameter, jadi periksa robocopy /?.

Semoga ini membantu! :-)


1Ditemukan di sini: Bagaimana cara melintasi pohon folder/subpohon dalam file batch windows?
2Ditemukan di sini: http://www.dostips.com/DtTutoFunctions.php

person Kurtibert    schedule 17.11.2014
comment
Saya mencari solusi yang Diratakan dan skrip itu berfungsi dengan baik dengan satu solusi TETAPI... Saya tidak dapat menjalankan file batch di intranet bersama jadi saya perlu memiliki tautan sumber ke satu folder tempat gambar akan diambil - person Freedox; 18.11.2014
comment
Tidak bisakah Anda menggunakan net use Y: \\intranet\PP Complete Images\ saja? Kemudian Anda dapat mengakses share tersebut melalui huruf drive Y:. - person Kurtibert; 18.11.2014
comment
Ini adalah drive rusak dalam sebuah perusahaan Ini adalah link yang saya gunakan untuk mengakses semua folder di tujuan: \\btbnas\PP Gambar Lengkap - person Freedox; 18.11.2014
comment
tetapi bisakah saya menentukan tujuan itu untuk foler bersama + saya hanya memerlukan file *.jpg? - person Freedox; 18.11.2014
comment
Perintah for menemukan semua elemen dari direktori kerja saat ini. Jadi, Anda dapat menggunakan net use Y: \\intranet\PP Complete Images\ untuk memetakan Y: ke bagian Anda. Setelah itu, perintah Y: mengubah direktori kerja menjadi share Anda. - person Kurtibert; 18.11.2014

Saya yakin solusi untuk masalah Anda adalah Robocopy. Robocopy benar-benar luar biasa!

Berikut adalah sintaks robocopy-

robocopy [Sumber] [Tujuan] [File] [...] [pilihan]

Sumber Menentukan folder sumber. Dari mana Anda ingin mengambil file.

Tujuan Direktori/folder tujuan.

File Ini dia! Inilah yang akan membantu Anda. Di sini Anda dapat menentukan ekstensi yang ingin Anda pindahkan. Jadi dalam kasus Anda, kode Anda akan terlihat seperti ini.

robocopy *.jpg c:\destinationdir /S /MAX:1048576

*Untuk menjalankan .bat ini setiap pagi, buka program yang disebut penjadwal tugas, jangan khawatir, ini sudah ada di dalam windows. http://windows.microsoft.com/en-US/windows/schedule-task#1TC=windows-7

*Kemudian Klik Buat tugas dasar, dan atur tugas Anda kapan pun Anda mau!

person Pringles    schedule 17.11.2014

Terima kasih teman-teman atas bantuan kalian!!!

Saya menyelesaikannya dan ada kode di bawah ini jika seseorang membutuhkan sesuatu yang serupa:

    pushd Z:\intranet\PP Complete Images\
   for /r %%a in (*.jpg) do (
      XCOPY /Y "%%a" "C:\Users\username\Desktop\Master Image Folder"
   )
popd
person Freedox    schedule 20.11.2014