Bat script zum kopieren von dateien der letzten stunde, zippen und löschen?
Hallo,
ich versuche mich auch gerade mehr oder weniger erfolgreich an diesem script.
Ich möchte eigentlich alle log files die in der letzten Stunde "beschrieben" wurden an einen bestimmten Ort kopieren und dort "zippen" und zum Schluß alles wieder löschen bis auf das zip file.
So sieht es bisher aus
echo off & setlocal
set "datum=%Date%"
set "tag=%Datum:~0,2%"
set "mon=%Datum:~3,2%"
set "jahr=%Datum:~6,4%"
set "zip"="C:\Program Files\7-Zip\7z.exe"
set "zipfile=\verzeichnis\LOGS_%jahr%%monat%%tag%-%hou%-%min%-%sec%.zip"
md "\\srv1\Transfer\TRAC Share\logs\%date%"
set "Basis=\\srv2\logs\"
set "Ziel=\\srv4\log-file\%date%"
set "Typ=log"
xcopy "\\verzeichnis\*.xml" "%ziel%"
xcopy "\\verzeichnis\.mxf" "%ziel%"
xcopy "\\verzeichnis\*.exe.config" "%ziel%"
xcopy "\\verzeichnis\*.xml" "%ziel%"
xcopy "\\verzeichnis\interfaceserver.log" "%ziel%"
if not exist "%Ziel%" md "%Ziel%"
REM Dateien aus Basisordner einsammeln
for /f "delims=" %%f in ('dir /b "%Basis%\*.%Typ%" 2^>nul') do call :ProcessFile "%Basis%\%%f"
REM Dateien aus den Unterordnern (rekursiv) einsammeln ...
for /d %%d in ("%Basis%\*.*") do (
REM ... dabei aber den Zielordner aussparen
if /i "%%d" neq "%Ziel%" (
for /f "delims=" %%f in ('dir /s /b "%%d\*.%Typ%" 2^>nul') do call :ProcessFile "%%f"
)
)
goto :eof
:ProcessFile
echo %~t1|findstr /b "%date%">nul && (
echo %~1
copy %1 "%Ziel%">nul
)
%zip% a -tzip %zipfile% "\\srv4\log-file\%date%"
del "\\srv4\log-file\%date%\*.*"
rmdir "\\srv4\log-file\%date%
goto :eof
es wird auch alles schön kopiert, nur leider alles vom heutigen Datum und nicht der letzten stunde.
1. Wie muss es aussehen wenn nur die Dateien der letzte Stunde kopiert werden sollen
2. Wie kann ich das zippen und wieder alles löschen zum Schluß?
Vielen Dank für eure Hilfe
LG MeerSehn
ich versuche mich auch gerade mehr oder weniger erfolgreich an diesem script.
Ich möchte eigentlich alle log files die in der letzten Stunde "beschrieben" wurden an einen bestimmten Ort kopieren und dort "zippen" und zum Schluß alles wieder löschen bis auf das zip file.
So sieht es bisher aus
echo off & setlocal
set "datum=%Date%"
set "tag=%Datum:~0,2%"
set "mon=%Datum:~3,2%"
set "jahr=%Datum:~6,4%"
set "zip"="C:\Program Files\7-Zip\7z.exe"
set "zipfile=\verzeichnis\LOGS_%jahr%%monat%%tag%-%hou%-%min%-%sec%.zip"
md "\\srv1\Transfer\TRAC Share\logs\%date%"
set "Basis=\\srv2\logs\"
set "Ziel=\\srv4\log-file\%date%"
set "Typ=log"
xcopy "\\verzeichnis\*.xml" "%ziel%"
xcopy "\\verzeichnis\.mxf" "%ziel%"
xcopy "\\verzeichnis\*.exe.config" "%ziel%"
xcopy "\\verzeichnis\*.xml" "%ziel%"
xcopy "\\verzeichnis\interfaceserver.log" "%ziel%"
if not exist "%Ziel%" md "%Ziel%"
REM Dateien aus Basisordner einsammeln
for /f "delims=" %%f in ('dir /b "%Basis%\*.%Typ%" 2^>nul') do call :ProcessFile "%Basis%\%%f"
REM Dateien aus den Unterordnern (rekursiv) einsammeln ...
for /d %%d in ("%Basis%\*.*") do (
REM ... dabei aber den Zielordner aussparen
if /i "%%d" neq "%Ziel%" (
for /f "delims=" %%f in ('dir /s /b "%%d\*.%Typ%" 2^>nul') do call :ProcessFile "%%f"
)
)
goto :eof
:ProcessFile
echo %~t1|findstr /b "%date%">nul && (
echo %~1
copy %1 "%Ziel%">nul
)
%zip% a -tzip %zipfile% "\\srv4\log-file\%date%"
del "\\srv4\log-file\%date%\*.*"
rmdir "\\srv4\log-file\%date%
goto :eof
es wird auch alles schön kopiert, nur leider alles vom heutigen Datum und nicht der letzten stunde.
1. Wie muss es aussehen wenn nur die Dateien der letzte Stunde kopiert werden sollen
2. Wie kann ich das zippen und wieder alles löschen zum Schluß?
Vielen Dank für eure Hilfe
LG MeerSehn
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 193272
Url: https://administrator.de/forum/bat-script-zum-kopieren-von-dateien-der-letzten-stunde-zippen-und-loeschen-193272.html
Ausgedruckt am: 04.04.2025 um 05:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
pack doch bitte die Code-Zeilen zwischen die Tags < code > und < /code >, dann kann man das ersten besser lesen und zweitens kann man sich in einer Antwort auf eine Zeilennummer beziehen.
Infos zum verwendeten Betriebssystem ist bestimmt auch nicht von Nachteil
Nun zu deinem Skript:
da du in :ProcessFile nur nach dem %date% abfragst ist es m.E. nicht verwunderlich, dass du nur Dateien vom heutigen Datum bekommst.
Wo hast du eigentlich die Definition der Variablen %hou% %min% %sec%, die du in %zipfile% verwendest ?
pack doch bitte die Code-Zeilen zwischen die Tags < code > und < /code >, dann kann man das ersten besser lesen und zweitens kann man sich in einer Antwort auf eine Zeilennummer beziehen.
Infos zum verwendeten Betriebssystem ist bestimmt auch nicht von Nachteil
Nun zu deinem Skript:
da du in :ProcessFile nur nach dem %date% abfragst ist es m.E. nicht verwunderlich, dass du nur Dateien vom heutigen Datum bekommst.
Wo hast du eigentlich die Definition der Variablen %hou% %min% %sec%, die du in %zipfile% verwendest ?
moin MeerSehn,
Die Dateien der letzten Stunde bekommst Du so: (ab 1 Uhr)
Test auf der CMD-Line
7Zip hat auch eine Hilfe im CLI
Gruß Phil
Die Dateien der letzten Stunde bekommst Du so: (ab 1 Uhr)
Test auf der CMD-Line
> for /f "tokens=* delims=3" %a in ('set /a "x=(%time:~-11,2%+23)%24 +300" ') do @for /r %i in (*) do @for /f "tokens=1,2" %j in ("%~ti") do @if %j equ %date% if %k gtr %a:%time:~-8,2% echo %i
7Zip hat auch eine Hilfe im CLI
Gruß Phil