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-Key: 242702

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

Printed on: April 16, 2024 at 09:04 o'clock

Member: Gersen
Gersen Jul 04, 2014 at 08:22:39 (UTC)
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
Member: colinardo
colinardo Jul 04, 2014 updated at 10:42:58 (UTC)
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
Member: rubberman
rubberman Jul 04, 2014 updated at 09:17:25 (UTC)
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
Member: Dpole86
Dpole86 Jul 04, 2014 at 10:37:14 (UTC)
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.
Member: colinardo
Solution colinardo Jul 04, 2014 updated at 12:23:31 (UTC)
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
Member: rubberman
Solution rubberman Jul 04, 2014 updated at 12:23:29 (UTC)
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