Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ordnerdatum soll - 3 Tage sein

Frage Entwicklung Batch & Shell

Mitglied: matze-pe

matze-pe (Level 1) - Jetzt verbinden

05.02.2008, aktualisiert 07.02.2008, 4269 Aufrufe, 10 Kommentare

Hallo miteinander,
ich habe eine Script der mir alle Dateien bis auf die in den letzen 3 Tagen sichert.

im Script wird ein Ordner angelegt, der das heutige Datum als Ordnernamen nimmt. In dem Ordner befinden sich aber alle Dateien bis auf die in den letzen 3 Tagen.


Wie ändert man im Sckript, dass der Ordnernamen 2008_02_05 (-3 Tage) = 2008_02_02 heißt?



Hier mein Script:

01.
@echo off & setlocal 
02.
 
03.
set jahr=%date:~-4% 
04.
set monat=%date:~-7,2% 
05.
set tag=%date:~-10,2% 
06.
 
07.
 
08.
md D:\Sicherung\bis_%jahr%-%monat%-%tag%\ 
09.
 
10.
 
11.
set /a MindestAlter=3 
12.
set "Quelle=C:\Sicherung\*.*" 
13.
set "Ziel=D:\Sicherung\bis_%jahr%-%monat%-%tag%\" 
14.
 
15.
set "AG=%temp%\Age.vbs" 
16.
echo Sicherung: Fenster wird in wenigen Minuten automatisch geschlossen! 
17.
echo ----------------------------------------------------------------------- 
18.
 
19.
echo A=DateDiff("d", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified, Now):WScript.Echo A>"%AG%" 
20.
for %%i in ("%Quelle%") do for /f %%a in ('cscript //nologo "%AG%" "%%i"') do if %%a gtr %MindestAlter% move "%%i" "%Ziel%\%%~ni%%~xi.txt" 
21.
del "%AG%"


mfg
Matze-Pe


[Edit Biber] Auf <code> formatiert. [/Edit]
Mitglied: bastla
05.02.2008 um 17:05 Uhr
Hallo matze-pe!

Ich hoffe, dass es ist Dir recht ist, wenn das Ordnerdatum nicht mit -3 Tagen, sondern mit -%MindestAlter% Tagen ermittelt wird:
01.
@echo off & setlocal 
02.
set /a MindestAlter=3 
03.
set "Quelle=C:\Sicherung\*.*" 
04.
 
05.
set "GD=%temp%\GetDate.vbs" 
06.
echo D=DateAdd("d",-%MindestAlter%,Now):WScript.Echo Year(D)^&"_"^&Right("0"^&Month(D),2)^&"_"^&Right("0"^&Day(D),2)>"%GD%" 
07.
for /f "tokens=1-3 delims=_" %%i in ('cscript //nologo "%GD%"') do set jahr=%%i&set monat=%%j&set tag=%%k 
08.
del "%GD%" 
09.
 
10.
set "Ziel=D:\Sicherung\bis_%jahr%-%monat%-%tag%\" 
11.
md "%Ziel%" 2>nul 
12.
 
13.
echo Sicherung: Fenster wird in wenigen Minuten automatisch geschlossen! 
14.
echo ----------------------------------------------------------------------- 
15.
 
16.
set "AG=%temp%\Age.vbs" 
17.
echo A=DateDiff("d", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified, Now):WScript.Echo A>"%AG%" 
18.
for %%i in ("%Quelle%") do for /f %%a in ('cscript //nologo "%AG%" "%%i"') do if %%a gtr %MindestAlter% move "%%i" "%Ziel%\%%~ni%%~xi.txt" 
19.
del "%AG%"
Grüße
bastla
Bitte warten ..
Mitglied: Biber
05.02.2008 um 18:14 Uhr
Moin Matze-pe und bastla,

unbedeutender Vorschlag zur Vereinfachung:
Da diese Variablen %tag%, %monat% und %jahr% nun wirklich nicht benötigt werden, sondern nur EINE Variable mit dem "Heute - 3"-Verzeichnisnamen,
ginge es auch etwas schlanker...

01.
....( Ersatzzeilen für alles zwischen [Set "GD=..."] und [md "%Ziel%" 2>nul] inkl. 
02.
set "GD=%temp%\GetDate.vbs" 
03.
echo Wscript.echo dateadd("d", date, -%Mindestalter%) >%GD% 
04.
for /f "tokens=1-3 delims=." %%i in ('cscript //nologo "%GD%"') do set "Ziel=D:\Sicherung\bis_%%k-%%j-%%i" 
05.
del "%GD%" 
06.
 
07.
md "%Ziel%" 2>nul 
08.
 
09.
...
Grüße
Biber
Bitte warten ..
Mitglied: matze-pe
05.02.2008 um 18:17 Uhr
Hallo Bastla,

dein veränderstes Script passt nicht mehr, es kommt die Fehlermeldung:

"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnug ist falsch.


[img]http://img212.imageshack.us/img212/6094/unbenanntki4.jpg[/img]



LG
Matze
Bitte warten ..
Mitglied: matze-pe
05.02.2008 um 18:34 Uhr
Hallo Ihr beiden,
vielen Dank erstmal an euch beiden, aber das Probelm besteht weiterhin, das der Dateinanemn nicht stimmt, siehe screenshot^^


LG
Matze
Bitte warten ..
Mitglied: bastla
05.02.2008 um 18:48 Uhr
Hallo matze-pe!

Anmerkung zu Deinem Screenshot:
Im CMD-Fenster lässt sich sehr einfach Text markieren und kopieren - dazu Rechtsklick auf das Systemmenü (ganz links in der Titelleiste) des CMD-Fensters und im Register "Optionen" den "QuickEdit-Modus" einschalten. Beim Beenden die zweite Option ("... für alle Fenster ...") wählen. Ab sofort kannst Du dann im CMD-Fenster mit der linken Maustaste markieren und durch Rechtsklick kopieren, bzw, wenn kein Text markiert ist, durch Rechtsklick den Inhalt der Zwischenablage einfügen. Dann noch den so kopierten Text zwischen <code>-Tags stellen und posten ...

Bevor Du das ausprobierst ändere aber bitte das "@echo off" in der ersten Batchzeile auf "@echo on" - dann sieht man/frau nämlich, wodurch der Fehler ausgelöst wird.

Da ich den eigentlichen Verschiebeteil unverändert übernommen habe, kann der Fehler eigentlich nur auf den Verzeichnisnamen zurückzuführen sein - daher kannst Du wahrscheinlich schon nach den ersten 3 Dateien den Batch abbrechen.

Na ja, schaun mer mal ...
@Biber
D'accord.

Eigentlich wollte ich gleich den gesamten Datumsstring passend formatiert ausgeben (was ich ja ohnehin mache), aber dann ist mir die Diskrepanz zwischen Beschreibung (Trennzeichen "_") und "set"-Zeile (Trennzeichen "-") aufgefallen, und daher wollte ich matze-pe die "gewohnten" Variablen bieten, um sich den endgültigen Verzeichnisnamen daraus selbst zusammenzusetzen - nixdestotrotz ist natürlich Dein Vorschlag eleganter.

Grüße
bastla
Bitte warten ..
Mitglied: matze-pe
06.02.2008 um 09:29 Uhr
Alles klar, vielen Dank.

Hat wunderbar funktioniert.


LG
Matze
Bitte warten ..
Mitglied: Biber
06.02.2008 um 09:41 Uhr
Moin matze-pe,

hab ich nicht verstanden.
Was war denn nun der Unterschied zwischen dem Skript, das den Fehler oben geworfen hat und dem, das wunderbar funktioniert?

Oder noch hilfreicher für alle MitleserInnen:
poste doch bitte noch mal die Version, die jetzt tatsächlich im richtigen Leben einsetzbar ist.

Danke
Biber
Bitte warten ..
Mitglied: matze-pe
06.02.2008 um 11:24 Uhr
Hallo,
der Fehler lag in der Pafdangabe.

Und ein kleiner Denkfehler ist noch drin, ist es möglich das Datum vom Ordner 4 Tage zurück zu setzen und die Dateien der letzten 3 Tage.

Beispiel: Heute haben wir den 6.2.08, die Dateien werden bis zum 02.02.08 gesichert und der Ordnernamen heißt bis_08-02-03


Ist es möglich das zu ändern?


Vielen Dank


LG
Matze
Bitte warten ..
Mitglied: bastla
06.02.2008 um 14:27 Uhr
Hallo matze-pe!

Etwa so:
01.
echo D=DateAdd("d",-%MindestAlter%-1,Now)...
Damit bleibt's immer noch variabel, ansonsten einfach:
01.
echo D=DateAdd("d",-4,Now)...
Grüße
bastla
Bitte warten ..
Mitglied: matze-pe
07.02.2008 um 09:17 Uhr
Wunderbar, hat geklappt

Vielen vielen Dank
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Sticky Notes - Autostart unterbinden

Tipp von Pedant zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
Dateien löschen mit Forfiles, welche älter als x Tage sind (3)

Frage von kellbidden zum Thema Windows Server ...

Batch & Shell
Fileserver Daten älter als 14 Tage löschen! (11)

Frage von michi-ffm zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Batch & Shell
gelöst Base64 Decode (Batch,VBS) (26)

Frage von clragon zum Thema Batch & Shell ...

Router & Routing
Tipps für Router (ca. 100 clients, VPN) (17)

Frage von oel-auge zum Thema Router & Routing ...