simontempler
Goto Top

CMD Script gesucht: HDD incl. SubFolder durchsuchen und Dateien kopieren

Moin liebe Community,

ich suche ein CMD Script was meine HDD (incl. Subbfolder) nach Datei Typen durchsucht (z.B. *.jpg, *.mp4, *.pdf etc.) und diese in ein Zielverzeichnis kopiert.
Dabei sollen die Dateien jeweils ein eigenes Verzeichnis bekommen (z.B. PDF Files in ein PDF Verzeichnis, JPG in das JPG Verzeichnis). So das ich eine schöne Baumstruktur habe.

Soll später so aus sehen:

C:\_Backup\JPG
C:\_Backup\PDF
C:\_Backup\MP4
...

Das Sahnehäubchen wäre es, wenn ein C:\_Backup\Logs Verzeichnis erstellt wird, wo nach Datum und Datei Typ eine Log Datei abliegt.

Über eure Hilfe wäre ich sehr Dankbar.

Content-Key: 370351

Url: https://administrator.de/contentid/370351

Printed on: April 25, 2024 at 10:04 o'clock

Mitglied: 135799
135799 Apr 06, 2018 updated at 09:55:59 (UTC)
Goto Top
Simon sagt: Powershell face-smile
$drive = "D:"  
$target = "c:\_Backup"  
$log = "c:\_Backup\backup.log"  
Start-Transcript -Path $log -Append
gci "$drive\*" -File -Recurse -Force -Include "*.pdf","*.mp4" | group Extension | %{  
    $dest = $target + "\" + $_.Name.Substring(1)  
    if (!(Test-Path $dest)){md $dest -Force | out-null}
    $_.Group | copy-item -Destination $dest  -Verbose
}
Stop-Transcript
Schnuffi
Member: user217
user217 Apr 06, 2018 at 10:50:12 (UTC)
Goto Top
robocopy + gui kann das sicher auch flexibler..
Mitglied: 135799
135799 Apr 06, 2018 updated at 10:52:39 (UTC)
Goto Top
Nur mit Robocopy in die Extension Ordner einsortieren wird damit dann doch aufwendig face-smile.
Member: user217
user217 Apr 06, 2018 at 10:57:13 (UTC)
Goto Top
da geb ich dir recht, ABER ich denke das die Anzahl der Suffixe von Media Dateien relativ übersichtlich sein sollte daher könnte man in Erwägung ziehen diese per Hand anzulegen face-smile
Mitglied: 135799
135799 Apr 06, 2018 updated at 10:59:47 (UTC)
Goto Top
Und wie bekommst du die Files da dann ohne Baumstruktur (flat) nur mit robocopy reinkopiert?

Wozu schreibt man dann Skripte wenn man doch wieder alles von Hand macht face-big-smileface-big-smile
Member: Friemler
Friemler Apr 06, 2018 updated at 18:04:01 (UTC)
Goto Top
Hallo,

hier noch (wie gefordert) eine Lösung in Batchscript:

@echo off & setlocal

set "SrcDrive=D:"  
set "DstFolder=C:\_Backup"  
set "LogFolder=%DstFolder%\Logs"  
set "FileTypes=JPG PDF MP4"  

set "Dt=%Date%"  
set "Today=%Dt:~6,4%-%Dt:~3,2%-%Dt:~0,2%"  

set "Tm=%Time%"  
set "Now=%Tm:~0,2%-%Tm:~3,2%-%Tm:~6,2%"  

set "LogFilenamePrefix=%Today%_%Now%"  


md "%LogFolder%" 2>NUL  

for %%a in (%FileTypes%) do (
  md "%DstFolder%\%%a" 2>NUL  

  (for /f "tokens=* delims=" %%b in ('dir /s /b /a:-d "%SrcDrive%\*.%%a" 2^>NUL') do (  
     copy "%%b" "%DstFolder%\%%a" 1>NUL 2>NUL && (  
       echo Datei kopiert: %%b
     ) || (
       echo Kopieren fehlgeschlagen: %%b
     )
  )) > "%LogFolder%\%LogFilenamePrefix%_%%a.log"  
)

Wo Quelllaufwerk, Zielverzeichnis und die zu kopierenden Dateitypen konfiguriert werden können sollte klar sein. Aber Achtung! Die Dateitypen müssen mit Leerzeichen getrennt aufgezählt werden und dürfen auf keinen Fall Wildcards (* oder ?) enthalten!

Beim Zerlegen der Datums- und Zeitinformationen aus den entsprechenden Umgebungsvariablen wird von den deutschen Standardformaten ausgegangen (dd.MM.yyyy für das Datum, hh:mm:ss für die Zeit). Sollte auf dem Zielsystem etwas anderes eingestellt sein, müssen die Zeilen 9 und 12 entsprechend angepasst werden.

Falls Du die Zeitinformation im Namen der Log-Datei nicht benötigst, lösche die Zeilen 11 und 12 und entferne die Variable %Now% inkl. dem vorangestellten Unterstrich aus Zeile 14.

Grüße
Friemler