Dateien suchen, kopieren und sortieren
Hallo,
folgendes Problem:
Dateien, die auf einem Laufwerk monatsweise in Ordnern abgelegt sind, sollen per Batch auf ein anderes Laufwerk kopiert werden und gleichzeitig nicht nach Monate, sondern nach Benennung einsortiert werden. Dabei kann es auch vorkommen, dass gleich benannte Dateien in mehreren Ordner vorkommen.
Iststand:
- Ordner
..\2015_07\
..\2015_06\
...
..\2003_07\
- Dateien
..\2015_07\1.MES
..\2015_07\12.MES
...
..\2015_07\12345678.MES
Soll:
- Ordner
..\00000000-00009999\
..\00010000-00019999\
...
..\34990000-34999999\
Kann mir da jemand helfen, oder ist das für eine Batch zu kompliziert? Bin ein Neuling auf dem Gebiet...
MfG BAD1HOR
folgendes Problem:
Dateien, die auf einem Laufwerk monatsweise in Ordnern abgelegt sind, sollen per Batch auf ein anderes Laufwerk kopiert werden und gleichzeitig nicht nach Monate, sondern nach Benennung einsortiert werden. Dabei kann es auch vorkommen, dass gleich benannte Dateien in mehreren Ordner vorkommen.
Iststand:
- Ordner
..\2015_07\
..\2015_06\
...
..\2003_07\
- Dateien
..\2015_07\1.MES
..\2015_07\12.MES
...
..\2015_07\12345678.MES
Soll:
- Ordner
..\00000000-00009999\
..\00010000-00019999\
...
..\34990000-34999999\
Kann mir da jemand helfen, oder ist das für eine Batch zu kompliziert? Bin ein Neuling auf dem Gebiet...
MfG BAD1HOR
Please also mark the comments that contributed to the solution of the article
Content-Key: 286439
Url: https://administrator.de/contentid/286439
Printed on: April 25, 2024 at 20:04 o'clock
6 Comments
Latest comment
Moin BAD1HOR,
vielleicht solltest du deine Beschreibung etwas klarer machen, vermutlich hat deswegen noch keiner geantwortet. Habe es mal versucht zu interpretieren,
hier eine Lösung mit Powershell.
Gruß jodel32
vielleicht solltest du deine Beschreibung etwas klarer machen, vermutlich hat deswegen noch keiner geantwortet. Habe es mal versucht zu interpretieren,
hier eine Lösung mit Powershell.
#Quellordner
$source = 'c:\quelleroot'
# Zielordner
$target = 'C:\zielroot'
# Logfile
$logfile = 'C:\logfile.txt
$cnt = 0
# Für alle Dateien des Quellordners inkl. Unterordner welche nur aus Zahlen bestehen ...
gci $source -recurse | ?{!$_.PSIsContainer -and $_.Basename -match '^\d+$'} | %{
# Ordnername generieren (10000er Sätze)
$lowerbound = [math]::Floor(([decimal]$_.BaseName / 10000)) * 10000
$newfolder = $target + "\" + $lowerbound.toString().PadLeft(10,'0') + "-" + ($lowerbound + 9999).toString().padLeft(10,'0')
# Ordner erstellen falls er noch nicht existiert
if (!(Test-Path $newfolder)){md $newfolder -Force | out-null}
$fname = $_.Name; $cnt = 1
# auf Duplikate checken und bei Bedarf eine zusätzliche Nummer (x) anhängen
while((Test-Path "$newfolder\$fname")){
$fname = "$($_.Basename)($cnt)$($_.Extension)"; $cnt++
}
# Datei in Zielordner kopieren
copy $_.FullName "$newfolder\$fname" -Verbose
$cnt++
}
# Write Log
@"
$(get-date -F g) / Computer: $env:COMPUTERNAME / Anzahl kopierter Dateien: $($cnt)
--------------
"@ | Add-Content -Path $logfile
Zitat von @BAD1HOR:
1. Ist es auch möglich, in der Powershell die kopierten Dateien anzuzeigen, und die erstellten Ordner nicht anzeigen?
2. Wie kann ich dazu noch ein LogFile schreiben?
Log soll enthalten:
- Datum mit Zeit
- Rechnername
- Anzahl kopierte Dateien
Alles oben ergänzt ..1. Ist es auch möglich, in der Powershell die kopierten Dateien anzuzeigen, und die erstellten Ordner nicht anzeigen?
2. Wie kann ich dazu noch ein LogFile schreiben?
Log soll enthalten:
- Datum mit Zeit
- Rechnername
- Anzahl kopierte Dateien
Gruß jodel32
Zitat von @BAD1HOR:
Hallo jodel32,
hat fast funktioniert. Das zählen in der LogFile geht nicht. Bei $(cnt) kam eine Fehlermeldung das cnt nicht definiert wäre, dann habe ich daraus $($cnt) gemacht, wurde dann aber falsch gezählt.
Fehler korrigiert (Dollarzeichen vor der Variablen vergessen...Hallo jodel32,
hat fast funktioniert. Das zählen in der LogFile geht nicht. Bei $(cnt) kam eine Fehlermeldung das cnt nicht definiert wäre, dann habe ich daraus $($cnt) gemacht, wurde dann aber falsch gezählt.
Außerdem brauche ich noch 2 Erweiterungen.
Gegen Entgeld gerne....Gruß jodel32