Dateien Automatisch verschieben und gleich sortieren, nach Datum!
Hallo zusammen,
möchte mit einer Batch Datei automatisch Dateien verschieben/sortiert lassen. Da meine Kenntnisse nicht ausreichen, bitte ich euch um Hilfe.
Die Daten der letzten 30 Tage sollen nicht verschoben werden.
Quelle: C:\VL\HistoricalWaferDataLogs\PM2
Ziel: C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1\2013\12
….\2013\12 sollen die Daten von 2013 und Dezember rein
….\2014\01 sollen die Daten von 2014 und Januar rein
\2014\02 usw.
Beispiel der zu verschiebenden Dateien
211F001_seq.test2.04AA.1-13-2011.16-39-44.txt
211F032_seq.b1416098.02AA.4-17-2014.1-22-0.txt
211F032_seq.b1416098.03AA.4-17-2014.1-31-15.txt
clean_seq.unknown carrier-unknown waferAa.11-30-2012.10-22-30.txt
Weis nicht ob es sinnvoll ist den Namen/Datum auszulesen oder Dateiattribute zu gehen.
Vielen Dank schon mal!
Weil ich meine Kenntnisse erweitern will, bitte Batch Datei kommentieren.
Grüße
Walter
möchte mit einer Batch Datei automatisch Dateien verschieben/sortiert lassen. Da meine Kenntnisse nicht ausreichen, bitte ich euch um Hilfe.
Die Daten der letzten 30 Tage sollen nicht verschoben werden.
Quelle: C:\VL\HistoricalWaferDataLogs\PM2
Ziel: C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1\2013\12
….\2013\12 sollen die Daten von 2013 und Dezember rein
….\2014\01 sollen die Daten von 2014 und Januar rein
\2014\02 usw.
Beispiel der zu verschiebenden Dateien
211F001_seq.test2.04AA.1-13-2011.16-39-44.txt
211F032_seq.b1416098.02AA.4-17-2014.1-22-0.txt
211F032_seq.b1416098.03AA.4-17-2014.1-31-15.txt
clean_seq.unknown carrier-unknown waferAa.11-30-2012.10-22-30.txt
Weis nicht ob es sinnvoll ist den Namen/Datum auszulesen oder Dateiattribute zu gehen.
Vielen Dank schon mal!
Weil ich meine Kenntnisse erweitern will, bitte Batch Datei kommentieren.
Grüße
Walter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 237367
Url: https://administrator.de/forum/dateien-automatisch-verschieben-und-gleich-sortieren-nach-datum-237367.html
Ausgedruckt am: 25.04.2025 um 04:04 Uhr
12 Kommentare
Neuester Kommentar
Hallo Walter, Willkommen im Forum!
Das ließe sich so machen (Kommentare befinden sich im Batch-Code):
Solltest du die verzögerte Variablenerweiterung noch nicht kennen, lese Dir mal folgendes Tutorial zur For-Schleife durch, besonders den Abschnitt Exkurs (verzögerte) Variablenerweiterung. Du benötigst für die verzögerte Variablenerweiterung das setlocal ENABLEDELAYEDEXPANSION, und die Variable in der Schleife muss anstatt mit Prozentzeichen mit Ausrufezeichen umschlossen werden. Die Verzögerte Variablenerweiterung bewirkt das alles was zwischen zwei Ausrufezeichen steht erst zur Ausführungszeit des Scripts expandiert wird anstatt schon beim Parsen des Scripts.
Grüße Uwe
Das ließe sich so machen (Kommentare befinden sich im Batch-Code):
@echo off & setlocal ENABLEDELAYEDEXPANSION
:: Quellordner
set "quelle=C:\VL\HistoricalWaferDataLogs\PM2"
:: Zielordner
set "ziel= C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1"
:: durchlaufe alle Dateien die älter als 30 Tage sind und gebe für die FOR-Schleife den Dateinamen und das Änderungsdatum getrennt mit einer Raute aus, für die Trennung in der Schleife
for /f "tokens=1,2 delims=#" %%a in ('forfiles /D -31 /p "%quelle%" /c "cmd /c echo @file#@fdate" 2^>nul') DO @(
:: entferne die umschließenden Anführungszeichen aus dem Dateinamen
set "file=%%~a"
:: Variablen für die Teile des Datums setzen
set datum=%%b
set year=!datum:~6,4!
set month=!datum:~3,2!
:: Zielordner zusammensetzen
set "zielordner=%ziel%\!year!\!month!"
:: Wenn der Ordner noch nicht existiert, erstelle ihn
if not exist "!zielordner!" md "!zielordner!"
:: Verschiebe Datei in den neuen Ordner
move "%quelle%\!file!" "!zielordner!"
)
Grüße Uwe
Zitat von @Johannes0511:
Deutsch läuft es wunderbar. Benötige es auf Englischen PC (United States)
Datum 05/09/2014 MM/DD/YYYY.
Deutsch läuft es wunderbar. Benötige es auf Englischen PC (United States)
Datum 05/09/2014 MM/DD/YYYY.
set year=!datum:~6,4!
set month=!datum:~0,2!
Grüße Uwe
Zitat von @Johannes0511:
geht auch nicht. Abfrage date gibt folgendes wieder: Fri 05/09/2014.
Kann es sein das bei der englischer Region, Variablen anderes sind.
OK dann ist die Einstellung auf dem PC für das kurze Datum vermutlich so eingestellt (Region und Sprache) M/T/JJJJ d.h. die Monate bzw. Tage sind nicht immer zweistellig. Dafür kannst du dieses abgewandelte Script hernehmen:geht auch nicht. Abfrage date gibt folgendes wieder: Fri 05/09/2014.
Kann es sein das bei der englischer Region, Variablen anderes sind.
@echo off & setlocal ENABLEDELAYEDEXPANSION
:: Quellordner
set "quelle=C:\VL\HistoricalWaferDataLogs\PM2"
:: Zielordner
set "ziel=C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1"
:: durchlaufe alle Dateien die älter als 30 Tage sind und gebe für die FOR-Schleife den Dateinamen und das Änderungsdatum getrennt mit einer Raute aus, für die Trennung in der Schleife
for /f "tokens=1,2,4 delims=#/" %%a in ('forfiles /D -31 /p "%quelle%" /c "cmd /c echo @file#@fdate" 2^>nul') DO @(
:: entferne die umschließenden Anführungszeichen aus dem Dateinamen
set "file=%%~a"
:: Variablen für die Teile des Datums setzen
set month=%%b
set year=%%c
:: Zielordner zusammensetzen
set "zielordner=%ziel%\!year!\!month!"
:: Wenn der Ordner noch nicht existiert, erstelle ihn
if not exist "!zielordner!" md "!zielordner!"
:: Verschiebe Datei in den neuen Ordner
move "%quelle%\!file!" "!zielordner!"
)
forfiles /c "cmd/c echo @fdate"
$quelle = "C:\VL\HistoricalWaferDataLogs\PM2"
$ziel = "C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1t"
$files = dir $quelle | ?{!$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).AddMonths(-1)}
foreach($file in $files){
$newfolder = "$ziel\$($file.LastWriteTime.Year)\$($file.LastWriteTime.Month)"
if (!(Test-Path $newfolder)){md $newfolder -Force}
move-item $file.FullName $newfolder -Force
}
das hätte man wissen müssen ...
Grüße Uwe
Für Powershell ist das System (Win XP SP3) zu alt und das zweite Skript geht leider nicht.
Powershell auf XP ? kein Problem ! .... http://www.microsoft.com/en-us/download/details.aspx?id=16818Wäre super wenn es laufen würde. Gibt es nicht ein Skript wo einfacher aufgebaut ist.
melde mich später nochmal ...Grüße Uwe
dann mach's halt mit VBS:
Denke das ist jetzt genug Stoff für dich ...
Grüße Uwe
Const quelle = "C:\VL\HistoricalWaferDataLogs\PM2"
Const ziel = "C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1"
Set fso = CreateObject("Scripting.Filesystemobject")
For Each f In fso.GetFolder(quelle).Files
If f.DateLastModified < DateAdd("m",-1,Now()) Then
newPath = ziel & "\" & Year(f.DateLastModified) & "\" & Month(f.DateLastModified)
If Not fso.FolderExists(ziel & "\" & Year(f.DateLastModified)) Then
fso.CreateFolder(ziel & "\" & Year(f.DateLastModified))
End If
If Not fso.FolderExists(newPath) Then
fso.CreateFolder(newPath)
End If
fso.MoveFile f.Path, newPath & "\"
End If
Next
MsgBox "Fertig"
Grüße Uwe
Moin Walter,

für dein Beispiel würde diese Zeile dann so aussehen:
Grüße Uwe
Zitat von @Johannes0511:
Wäre es Dir Möglich die beiden Batch „Powershell und VBS“ so abzuändern, das nur die Dateien Kopiert
und sortiert werden. Also nichts mehr verschoben wird.
hier schon mal die Powershell-Variante, VBS mach ich ein anderes mal.Wäre es Dir Möglich die beiden Batch „Powershell und VBS“ so abzuändern, das nur die Dateien Kopiert
und sortiert werden. Also nichts mehr verschoben wird.
$quelle = "C:\VL\HistoricalWaferDataLogs\PM2"
$ziel = "C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1t"
$files = dir $quelle | ?{!$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).AddMonths(-1)}
foreach($file in $files){
$newfolder = "$ziel\$($file.LastWriteTime.Year)\$($file.LastWriteTime.Month)"
if (!(Test-Path $newfolder)){md $newfolder -Force}
if (!(Test-Path "$newfolder\$($file.Name)")){
copy-item $file.FullName $newfolder -Force
}
}
Gibt es noch eine einfachere Lösung, Netzlaufwerke zu verbinden?
was meinst du mit einfacher ?? Ein bisschen Kopf anstrengen musst du schon Wäre es auch Möglich mir zu zeigen, wie man die automatisch angelegten Ordner, mit Datum abändert.
Wenn ich zum bespiel so sortiert haben will 2014-01
2014-02
Im obigen Powershell-Script ist das diese ZeileWenn ich zum bespiel so sortiert haben will 2014-01
2014-02
$newfolder = "$ziel\$($file.LastWriteTime.Year)\$($file.LastWriteTime.Month)"
$newfolder = "$ziel\$(get-date $file.LastWriteTime -Format 'yyyy-MM')"