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-ID: 370351

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

Ausgedruckt am: 26.11.2024 um 15:11 Uhr

135799
135799 06.04.2018 aktualisiert um 11:55:59 Uhr
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
user217
user217 06.04.2018 um 12:50:12 Uhr
Goto Top
robocopy + gui kann das sicher auch flexibler..
135799
135799 06.04.2018 aktualisiert um 12:52:39 Uhr
Goto Top
Nur mit Robocopy in die Extension Ordner einsortieren wird damit dann doch aufwendig face-smile.
user217
user217 06.04.2018 um 12:57:13 Uhr
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
135799
135799 06.04.2018 aktualisiert um 12:59:47 Uhr
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
Friemler
Friemler 06.04.2018 aktualisiert um 20:04:01 Uhr
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