Batch Datei mit for Hilfe zum Ändern
Hallo Admins,
ich bräuchte eure Hilfe beim abändern von einer Batchdatei die ich geschrieben habe. Habe leider keinen richtigen Ansatz und google hab ich fast alle links durch.
Das Skript verschiebt die Daten vom Quellordner zum Zielordner und erstellt Unterordner nach Kalenderjahr (Änderungsdatum) und sortiert diese dann dahin.
Das funktioniert auch soweit, nur möchte ich gerne noch einbauen, dass nur Dateien die älter als 30 Tage alt sind verschoben werden, wie mach ich das am Besten?
Ich denke mit einer IF Bedingung aber weiß leider nicht wie ich das mit for bzw. if NOT nochmal kombinieren kann.
Danke schonmal!
ich bräuchte eure Hilfe beim abändern von einer Batchdatei die ich geschrieben habe. Habe leider keinen richtigen Ansatz und google hab ich fast alle links durch.
Das Skript verschiebt die Daten vom Quellordner zum Zielordner und erstellt Unterordner nach Kalenderjahr (Änderungsdatum) und sortiert diese dann dahin.
Das funktioniert auch soweit, nur möchte ich gerne noch einbauen, dass nur Dateien die älter als 30 Tage alt sind verschoben werden, wie mach ich das am Besten?
Ich denke mit einer IF Bedingung aber weiß leider nicht wie ich das mit for bzw. if NOT nochmal kombinieren kann.
@Echo off & setlocal
set "Quelle=C:\Temp\Test_Copy\"
set "Ziel=C:\Temp\copied\"
for %%a in ("%Quelle%*") do (
if NOT "%%~nxa"=="%~nx0" (
Echo Verarbeite Datei "%%a"
set "fdate=%%~ta"
setlocal enabledelayedexpansion
set "fday=!fdate:~0,2!"
set "fmonth=!fdate:~3,2!"
set "fyear=!fdate:~6,4!"
set "folname=!fyear!"
md "%Ziel%!folname!" 2>nul
Echo Verschiebe Datei "%%a" nach "!folname!"
move "%%a" "%Ziel%!folname!\"
endlocal
)
)
Danke schonmal!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 347210
Url: https://administrator.de/contentid/347210
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
6 Kommentare
Neuester Kommentar
nur möchte ich gerne noch einbauen, dass nur Dateien die älter als 30 Tage alt sind verschoben werden, wie mach ich das am Besten?
Indem du einfach anstatt für alle Dateien
for %%a in ("%Quelle%*")
den Code eben nur für die Dateien laufen lässt, die älter als 30 Tage sind...
z.B.:
forfiles /p %Quelle% /m *.* /d -30 .......
Hierzu noch @File ...
Zitat von @sysx220:
Naja schön und gut das wäre nur die halbe Miete.
Ich brauche die Funktion dass die verschobenen Dateien in automatisch erstellte Ordner verschoben werden
bsp. Datei hat Änderungsdatum xx.xx.2017 --> wird in c:\x\2017 verschoben.
Und das scheint wie ich gesehen habe mit forfiles nicht zu funktionieren. Sondern lediglich alle von Quelle x zu Ziel x.
Doch du musst du nur forfiles als Quelle der FOR-Schleife benutzenNaja schön und gut das wäre nur die halbe Miete.
Ich brauche die Funktion dass die verschobenen Dateien in automatisch erstellte Ordner verschoben werden
bsp. Datei hat Änderungsdatum xx.xx.2017 --> wird in c:\x\2017 verschoben.
Und das scheint wie ich gesehen habe mit forfiles nicht zu funktionieren. Sondern lediglich alle von Quelle x zu Ziel x.
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "quelle=C:\Temp\Test_Copy"
set "ziel=C:\Temp\copied"
for /f "delims=" %%a in ('forfiles /P "%quelle%" /d -30 /c "cmd /c echo @path"') do (
set "d=%%~ta"
set "targetfolder=%ziel%\!d:~6,4!"
if not exist "!targetfolder!" md "!targetfolder!" >nul
move "%%~a" "!targetfolder!\"
)
$quelle = "C:\Quelle"
$ziel = "C:\ziel"
gci $quelle -Filter *.* | ?{$_.LastWriteTime -lt (get-date).AddDays(-30)} | group {$_.LastWriteTime.Year} | %{
# Zielordner der Gruppe festlegen
$targetfolder = "$ziel\$($_.Name)"
# wenn Zielordner noch nicht existiert erstelle ihn
if(!(Test-path $targetfolder)){md $targetfolder}
# Alle Dateien der Gruppe in den Zielordner verschieben
$_.Group | move-item -Destination $targetfolder -Force
}
Gruß