Dateinamen mit gleichem String in einen Ordner schieben, den Ordner nach String benennen
Einen Gruss an alle Forumser !
Nach vergeblicher Suche wende ich mich an euch mit meiner Frage.
Auf einem Windows-PC möchte ich einen Batch (Script.bat) laufen lassen, der mir folgendes erledigt:
Es gibt ein paar Hundert Dateien die allesamt solche Dateinamen haben:
M012014-09-19T101115.zip
M012014-09-20T105110.zip
M022014-09-19T111928.zip
M022014-10-20T113835.zip
M052014-10-19T130237.zip
Also die Dateien
M012014-09-19T101115.zip
M022014-09-19T111928.zip
M052014-10-19T130237.zip
sollen in den Ordner
2014-09-19
die Dateien
M012014-09-20T105110.zip
M022014-10-20T113835.zip
sollen in den Ordner
2014-09-20
Die Namen der Dateien darf ich dabei nicht umbenennen.
Habe bislang nur rudimentäre Batch-Kenntnisse
Ich wäre euch sehr dankbar für Hilfe
Merci! und Grüsse
Nach vergeblicher Suche wende ich mich an euch mit meiner Frage.
Auf einem Windows-PC möchte ich einen Batch (Script.bat) laufen lassen, der mir folgendes erledigt:
Es gibt ein paar Hundert Dateien die allesamt solche Dateinamen haben:
M012014-09-19T101115.zip
M012014-09-20T105110.zip
M022014-09-19T111928.zip
M022014-10-20T113835.zip
M052014-10-19T130237.zip
- Es gibt keine gleichen Dateinamen
- aber in jedem der Dateinamen sind die Zeichen 4 – 13 immer das Datum
- Alle Dateien mit den gleichen Zeichen (von 4 – 13 im Dateinamen) sollen in denselben Ordner verschoben werden
- der Ordner muss erstellt werden
- und der Ordner soll mit dem String benannt sein (Tagesdatum)
Also die Dateien
M012014-09-19T101115.zip
M022014-09-19T111928.zip
M052014-10-19T130237.zip
sollen in den Ordner
2014-09-19
die Dateien
M012014-09-20T105110.zip
M022014-10-20T113835.zip
sollen in den Ordner
2014-09-20
Die Namen der Dateien darf ich dabei nicht umbenennen.
Habe bislang nur rudimentäre Batch-Kenntnisse
Ich wäre euch sehr dankbar für Hilfe
Merci! und Grüsse
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313367
Url: https://administrator.de/contentid/313367
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
Um die Datenauswahl so gering wie möglich zu halten wird anstatt jede Datei anzuschauen nur der Relevante Datumteil einmalig extrahiert.
Um nur vorhandene Dateien eines Ortes zu dursuchen wird eine einfache Forschleife mit Platzhalter verwendet und verwertet.
Somit können auch Verschiebeaktionen mit Platzhaltern erfolgen.
Die Dateien werden pro gleichen Datum insgesamt verschoben.
Phil
Um die Datenauswahl so gering wie möglich zu halten wird anstatt jede Datei anzuschauen nur der Relevante Datumteil einmalig extrahiert.
Um nur vorhandene Dateien eines Ortes zu dursuchen wird eine einfache Forschleife mit Platzhalter verwendet und verwertet.
Somit können auch Verschiebeaktionen mit Platzhaltern erfolgen.
Die Dateien werden pro gleichen Datum insgesamt verschoben.
@echo off
setlocal disabledelayedexpansion
rem Einstellungen -------------
pushD "D:\TestverzeichnisMitTestdaten"
set "DateiFilter=*-*-*.zip"
set "OffsetDate=3,10"
rem Variable Test zeigt mit echo was es machen würde wenn die Variable nicht erstellt wird
rem Wird die Variable Test [ set "Test=echo" ] mit dem Inhalt echo in dieser Batch erstellt,
rem dann erfolgt nur eine Simulation vom Erstellen der Ordner und dem Verschieben der Dateien
rem --- Zum scharfstellen die Variable Test leer lassen [ set "Test=" ]
set "Test=echo"
rem Ende Einstellungen ------
for %%i in ("%DateiFilter%") do (
set "Ordner=%%i"
setlocal enabledelayedexpansion
for %%j in ("!Ordner:~%OffsetDate%!") do (
endlocal
call;
if not exist "%%~j\" %Test% md "%%~j"
if not errorlevel 1 ( echo(verschiebe nach %%~j :
%Test% move "*%%~j*%%~xi" "%%~j\"
) ) )
popD
Phil
Or
Regards
@echo off
set "folder=C:\medi2008"
if not exist "%folder%" md "%folder%"
powershell -Executionpolicy ByPass -Command "gci '%folder%' -Filter *.zip -recurse | group {[regex]::match($_.Basename,'\d{4}-\d{2}-\d{2}').Value} | %%{md \"%folder%\$($_.Name)\" -Force | out-null; $_.Group | Move-Item -Destination \"%folder%\$($_.Name)\" -Force}"
Der Ordner medi2008 wird aber gar nicht erstellt.
You didn't say that this folder does not exist. but you can simply create it with an additional line before the powershell line runs if not exist "%folder%" md "%folder%"
See changes above.
Regards
uups small typo, corrected above.