dpole86
Goto Top

Batch mit einer Spezieller Namenskonvention, komprimierung und Löschung

Guten Morgen Administratoren

Ich brauche hilfe bei einem Script

Ich kopiere von einem Ordner in einen anderen alle dateien des Ordners.
Dabei soll der Ordner in welchem Kopiert wird erst erstellt werden.
Der Name des Ordners soll dabei folgenden namen haben

Backup_Freitag_04.07.2014_08:55

Das Skript soll jeden Tag laufen
Somit ergeben sich am ende der Woche folgende Ordner

Backup_Montag_31.06.2014_08:55
Backup_Dienstag_01.07.2014_08:56
Backup_Mittwoch_02.07.2014_08:57
Backup_Donnerstag_03.07.2014_08:58
Backup_Freitag_04.07.2014_08:59

Jetzt soll das skript Prüfen ob es ein Backup mit Namen "Backups_Montag" gibt und
falls es das gibt soll er dies Löschen und ein neues erstellen.

Das Schwierigste für mich ist es den namen des aktuellen Tags zu bekommen. Für den Rest
habe ich schon einen Ansatz


Danke vielmals

Content-ID: 242702

Url: https://administrator.de/contentid/242702

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

Gersen
Gersen 04.07.2014 um 10:22:39 Uhr
Goto Top
Hallo,

den Namen des aktuellen Wochentags herausfinden:

set DOW=

for /f %%g in ('wmic path win32_localtime get dayofweek^|findstr /v /r "^$"') do (  
set DOW=%%g)

if %DOW%==0 set DOW=Sonntag
if %DOW%==1 set DOW=Montag
if %DOW%==2 set DOW=Dienstag
if %DOW%==3 set DOW=Mittwoch
if %DOW%==4 set DOW=Donnerstag
if %DOW%==5 set DOW=Freitag
if %DOW%==6 set DOW=Samstag

Gruß,
Gersen
colinardo
colinardo 04.07.2014 aktualisiert um 12:42:58 Uhr
Goto Top
den Namen des aktuellen Wochentags herausfinden:
alternativ geht's auch noch so:
:: Wochentag holen
echo wscript.Echo WeekdayName(Weekday(Now))>"%temp%\dow.vbs"  
for /f %%a in ('cscript //NOLOGO "%temp%\dow.vbs"') do set dow=%%a  

:: Löschen des Ordners
for /d %%b in ("D:\Backup_%dow%_*") do rd "%%b" /s /q  

::neuen Ordner erstellen
md "D:\Backup_%dow%_%date%_%time::=-%"  
Grüße Uwe
rubberman
rubberman 04.07.2014 aktualisiert um 11:17:25 Uhr
Goto Top
Hallo Zusammen,

oder so ...
@echo off &setlocal

setlocal EnableDelayedExpansion
set "n=0" &for /f "tokens=2 delims==" %%i in ('wmic path win32_localtime get dayofweek /value') do (  
  for /f %%j in ("%%i") do for %%k in (Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag) do (  
    if "!n!"=="%%j" set "DOW=%%k"  
    set /a "n+=1"  
) )
endlocal &set "DOW=%DOW%"  

for /f "delims=" %%i in ('dir /ad /b "Backup_%DOW%_*"') do echo gefunden: %%i  

pause

Somit ergeben sich am ende der Woche folgende Ordner

Backup_Montag_31.06.2014_08:55
...
Das ist eine infame Lüge face-wink Doppelpunkte in Verzeichnisnamen ...

Grüße
rubberman
Dpole86
Dpole86 04.07.2014 um 12:37:14 Uhr
Goto Top
Hallo Zusammen face-smile

Danke für die Vielen antworten.
Ich konnte mir währenddessen selber was zusammenbasteln face-smile

Hier der code

@ Echo On 
REM This script copies the folder from CAD to networkshare and set the Date of the copyjob 


REM --------------------------------------
set daysofweek=Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag 
REM -------------------------------------
goto Step1

:Step1
for /F "skip=2 tokens=2-4 delims=," %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /Format:csv') do set daynumber=%%A    
for /F "tokens=%daynumber% delims=," %%B in ("%daysofweek%") do set day=%%B  
echo %day% 
pause
if "%day%"=="Montag" goto Montag  
if "%day%"=="Dienstag" goto Dienstag  
if "%day%"=="Mittwoch" goto Mittwoch  
if "%day%"=="Donnerstag" goto Donnerstag  
if "%day%"=="Freitag" goto Freitag  
if "%day%"=="Samstag" goto Samstag  
if "%day%"=="Sonntag" goto Sonntag   
pause

:Montag
set tag=Montag
goto Create_Folder
:Dienstag
set tag=Dienstag
goto Create_Folder
:Mittwoch
set tag=Mittwoch
goto Create_Folder
:Donnerstag
set tag=Donnerstag
goto Create_Folder
:Freitag
set tag=Freitag
goto Create_Folder
:Samstag
set tag=Samstag
goto Create_Folder
:Sonntag
set tag=Sonntag
goto Create_Folder

:Create_Folder
REM Aktuelle Zeit holen und Doppelpunkte durch Punkte ersetzen
 set CURRENTTIME=%TIME::=.%
     
REM Nur erste 8 Zeichen der Zeit verwenden: HH.MM.SS
set CURRENTTIME=%CURRENTTIME:~0,8%
     
REM Archivnamen zusammensetzen
set ARCHIVNAME=Backup_%tag%_%DATE%-%CURRENTTIME%
     
REM Verzeichnis erstellen
mkdir D:\%ARCHIVNAME%

ist vllt nicht sehr schön aber verständlich :D

jetzt hackt es aber bei der Abfrage das er das älteste Backup löschen soll. oder einfach das Backup Löscht was mit Backup_montag_ beginnt.
colinardo
Lösung colinardo 04.07.2014 aktualisiert um 14:23:31 Uhr
Goto Top
jetzt hackt es aber bei der Abfrage das er das älteste Backup löschen soll.
steht in meinem Script von oben
for /d %%b in ("D:\Backup_%tag%_*") do rd "%%b" /s /q  
Grüße Uwe
rubberman
Lösung rubberman 04.07.2014 aktualisiert um 14:23:29 Uhr
Goto Top
Bei mir ist es Zeile 11. Dort zwar nur als ECHO Ausgabe, aber was du mit %%i anstellst, ist ja dir überlassen...

Grüße
rubberman