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

bitte um Unterstützung bei meiner Batch Sicherung

Frage Entwicklung Batch & Shell

Mitglied: Brutschi

Brutschi (Level 1) - Jetzt verbinden

17.11.2006, aktualisiert 23.11.2006, 7593 Aufrufe, 19 Kommentare

möchte eine Sicherung auf verschieden mobile Festplatten ausführen mit erstellung von täglichen Ordnern

Hallo Liebe Gemeinde ich brauche mal euere Unterstützung !!!
Also mein Probleem ist ich sicher per Batch eine Partition auf eine mobile Festplatte diese wird durch die exist.TxT erkannt
dann werden die daten mittels Xcopy befehl copiert.
bie dahin funktioniert das ganze jetzt möchte ich für jeden Wochentag ein neues Unterverzeichniss also
F:\Montag\......
F:\dienstag\....
Und einmal in Monat eine Sicherung die nicht Überschrieben wird also in etwa
F:\januar\....
Das ganze sollte möglichst ohne manuelle Eingabe fünktionieren.

mein bis jetzt verwendetes batch sieht so aus.

@Echo off
if exist G:\exist.txt goto start3
if exist H:\exist.txt goto start4
if exist I:\exist.txt goto start5
if exist J:\exist.txt goto start6
if exist K:\exist.txt goto start7
if exist L:\exist.txt goto start8
if exist M:\exist.txt goto start9
if exist N:\exist.txt goto start10
if exist O:\exist.txt goto start11
if exist P:\exist.txt goto start12
if exist Q:\exist.txt goto start13
if exist R:\exist.txt goto start14
if exist S:\exist.txt goto start15
if exist T:\exist.txt goto start16

goto fehler1


:start3
xcopy F:\*.* G:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start4
xcopy F:\*.* H:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start5
xcopy F:\*.* I:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start6
xcopy F:\*.* J:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start7
xcopy F:\*.* K:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start8
xcopy F:\*.* L:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start9
xcopy F:\*.* M:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start10
xcopy F:\*.* N:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start11
xcopy F:\*.* O:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start12
xcopy F:\*.* P:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start13
xcopy F:\*.* Q:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start14
xcopy F:\*.* R:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start13
xcopy F:\*.* S:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg

:start14
xcopy F:\*.* T:\*.* /S/V/E/Y/D/C
IF NOT ERRORLEVEL 1 GOTO erfolg
goto erfolg

:fehler1
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo !!!!!! Die Sicherung ist fehlgeschlagen !!!!!!
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pause
goto end

:erfolg
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo !!!!! Die Sicherung war erfolgreich !!!!!
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pause
end
exit

:end
exit



Vielen Dank schon jetzt für eure Unterstützung.
Mitglied: Biber
17.11.2006 um 20:38 Uhr
Moin Brutschi,

willkommen im Forum.
Hmm, wie sag' ich es bloss... am Besten vorsichtig...
Mit reinem native Batch hast Du wenig Chancen, an die Wochentags- und Monatstexte zu kommen.

Ich empfehle Dir dazu, mal ein bisschen in dem Batch-TutIII "Umgang mit Datums- und Zeitvariablen im Batch" zu schmökern...
...steht im Bereich "Batch & Shell".

Ganz kurzgefasst: Batch kennt keine Datums-Variablen. Nur Text. [..und ein ganz ganz bissi numerische Variablen]

Also: sobald du vom reinen Text "17.11.2006" auf Wochentag oder Kalenderwoche oder gestern oder in 3 Monaten kommen willst,
musst Du jemand fragen, der etwas davon versteht.

Damit meine ich jetzt nicht mich, sondern VBScript oder JScript, die Datumsfunktionen haben.
Das geht mit ein, zwei Zeilen vom Batch aus.

Damit kommst Du auf Wochentags- bzw. Monatsnamens-Texte.
War die erste Hürde.
Dazu die kleine Skizze hier:
01.
::---------snipp minidate.bat 
02.
@Echo off & setlocal 
03.
Echo Wscript.Echo DatePart(wscript.Arguments(0),Date) >%temp%\miniDateInfo.vbs 
04.
for /f %%i in ('cscript //nologo %temp%\miniDateInfo.vbs "w"') do Set "DoW=%%i" 
05.
for /f %%i in ('cscript //nologo %temp%\miniDateInfo.vbs "m"') do Set "Monat=%%i" 
06.
Del %temp%\miniDateInfo.vbs 
07.
 
08.
IF %DoW%==1 Set "cDow=Sonntach"  
09.
IF %DoW%==2 Set "cDow=Montach"  
10.
IF %DoW%==3 Set "cDow=Dienstach"  
11.
IF %DoW%==4 Set "cDow=Mittwoch"  
12.
IF %DoW%==5 Set "cDow=Donnerstach"  
13.
IF %DoW%==6 Set "cDow=Freitach"  
14.
IF %DoW%==7 Set "cDow=Samstach" 
15.
 
16.
IF %Monat%==1 Set "cMonat=Jänner" 
17.
IF %Monat%==2 Set "cMonat=Februar" 
18.
::.... 
19.
IF %Monat%==11 Set "cMonat=November" 
20.
IF %Monat%==12 Set "cMonat=Dezember" 
21.
 
22.
echo Demo1: Monat %Monat% -^> cMonat %cMonat% DoW: %DoW% -^> cDoW: %cDoW% 
23.
 
24.
REM und diese meterlange Eierei in Deinem Entwurf...  
25.
REM ...da drücken wir mal etwas die Luft aus dem Käse... 
26.
For %%x in (G H I J K L M N O P Q R S T) do if exist %%x:\exist.txt Set "meinLw=%%x" & goto weiter 
27.
goto keinLaufwerkDa 
28.
 
29.
:weiter 
30.
Echo Demo2: Laufwerk gefunden...Laufwerk ist %meinLw% ... xcopy F:\*.* meinLaufwerk%:\%cDow%\*.* /S/V/E/Y/D/C 
31.
IF ERRORLEVEL 1 GOTO fehler1 
32.
 
33.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
34.
echo !!!!! Die Sicherung war erfolgreich !!!!! 
35.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
36.
goto end 
37.
 
38.
:fehler1 
39.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
40.
echo !!!!!! Die Sicherung ist fehlgeschlagen !!!!!! 
41.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
42.
goto end 
43.
 
44.
:keinLaufwerkDa 
45.
echo !?!?!?!!?!?!?!!?!?!?!!?!?!?!!?!?!?! 
46.
echo !?!?!?! keinLaufwerkDa       !?!?! 
47.
echo !?!?!?!!?!?!?!!?!?!?!!?!?!?!!?!?!?! 
48.
 
49.
:end 
50.
pause
Output des Demo-Schnipsels (der wesentliche Teil):
01.
>f:\administrator\minidate 
02.
Demo1: Monat 11 -> cMonat November DoW: 6 -> cDoW: Freitach 
03.
Demo2: Laufwerk gefunden...Laufwerk ist X ... xcopy F:\*.* X:\Freitach\*.* /S/V/E/Y/D/C
Zur zweiten Hürde würde ich ja vorher gerne noch Deinen Plan einholen...

Woran erkennst Du denn, ob eine neue Vollsicherung für den Monat "November" dran ist?
Einfach daran, dass kein Unterverzeichnis "November" da ist auf dem Sicherungslaufwerk?
Und wenn doch eins da ist (vom November 2003) ?

Na ja, erstmal hast Du ja jetzt was zu lesen...

Grüße
Biber
Bitte warten ..
Mitglied: Brutschi
17.11.2006 um 21:06 Uhr
wow bin ja schwer beeinduckt
Wie du schon sagtest ich habe jetzt ein wenig zu lesen werde mich morgen mal an die Seiten setzen. Im übrigen reicht es mir wenn das skript den januar erkennt und falls vorhanden mit den neuen daten überschreibt damit habe ich schon einen großteil an sicherheit ( 11) Monate und zusätzlich die letzten 8 Tage .
Danke Bieber für die klasse unterstützung !!!!
Bitte warten ..
Mitglied: Brutschi
17.11.2006 um 21:26 Uhr
Sorry habe es gleich mal auspobiert aber leider kein erfolg gehabt eine wariabe meinlw ist mir aufgefallen allerdings kopiert das skript nicht leider weis ich nicht woran das liegt.
Bitte warten ..
Mitglied: Biber
17.11.2006 um 21:37 Uhr

...natürlich kopiert das Skript nicht...
Ich stell doch keine ungetesteten Batch-Skripte hier hin, die auf wildfremden Rechnern Daten ändern...
... ich bin doch nicht die c't... *entrüstet guck*

Also, in der Demo oben steht irgendwo:
01.
.... 
02.
:weiter 
03.
<b>Echo</b> Demo2: Laufwerk gefunden...Laufwerk ist %meinLw% ... xcopy F:\*.* meinLaufwerk%:\%cDow%\*.* /S/V/E/Y/D/C 
04.
...
Und solange der xcopy-Befehl nur angezeigt wird und nicht tatsächlich aufgerufen, solange wird auch nix entscheidendes passieren.
Das sollte nur ein Tipp sein, wie Du die erste Hürde nehmen und die Verzeichnisnamen "Montag" bis "Sonntag" und "Januar" bis "Dezember" bekommen könntest.

Außerdem - Du kannst unmöglich schon das ganze Tutorial durchgelesen haben...

Gruß
Biber
Bitte warten ..
Mitglied: Brutschi
18.11.2006 um 09:16 Uhr
Sorry natürlich habe ich das ganze toturial noch nicht gelesen aber dein Ansatz zur Lösung hat mich einfach neugierig gemacht und ich dachte ich probier das gleich mal. Da ich hier neu bin und dein skript noch nicht vollständig verstanden habe bitte ich dich um Entschuldigung wollte dir nicht zu nahe treten ( sorry) . Meine batch kentnisse sind leider noch sehr (native) wie du so schön erwähnst hast .
PS: hatte auch schon nach dem toturial gesucht aber das war es auch schon.
Bitte warten ..
Mitglied: Biber
18.11.2006 um 15:53 Uhr
Moin Brutschi,

ebenfalls sorry, ich wollte nicht so ruppig erscheinen, wie es vielleicht bei Dir angekommen ist.

Ich denke, ein kleines Missverständnis ist der Anspruch, den ich an dieses Forum und auch die vielen Tipp-Poster hier stelle,
Ich halte nichts davon, so wie es diese Tankstellen-PC-Zeitschriften machen, "das ultimative Utility" und "die 1000 besten sofort einsetzbaren Lösungen" zum Copy-and-Paste anzubieten.
Mir liegt schon etwas daran, dass der Fragesteller hinterher auch in der Lage ist, mit der geposteten Skizze und dem Lösungsweg einen Ansatz zu finden, sein Problem dann selbst zu lösen.. und eben auch das eine oder andere bei anderen Problemstellungen wiederzuverwenden.

Ich hatte mich dann oben aber auch dazu hinreißen lassen, drei Sachen gleichzeitig zu kommentieren bzw. zu kombinieren:
- das Thema "Datumswerte lesbar machen im Batch"... das war der Aspekt, wo ich Dich eigentlich auf den "richtigen" Weg bringen wollte.
- das rein handwerklich Eindampfen der Spaghetticode-Laufwerksprüfung hat gar nichts damit zu tun... gehörte auch gar nicht zur Frage.
Betrachte es als Fussnote oder vergiss es einfach.
- und richtig ungeschickt war es, dass ich dann noch versucht habe, die eigentlichen 10 Demozeilen mit Deiner Vorlage zu verquicken - was natürlich den Eindruck erwecken musste, das wäre eine einsetzbare Komplettlösung.

Deshalb jetzt noch mal die Beschränkung auf das Wesentliche und der rote Faden in Kurzfassung.

1. Mit Batch-Bordmitteln kannst Du nicht sinnvoll mit Datumswerten hantieren. Batch kennt keinen Variablentyp "Datum".
2. Aber: Die einfachen Skript-Utilities, die auch auf dem Rechner schlummern, also VBScript und JScript können das durchaus.
Also kann ich doch aus meinem Batch eine Skript-Funktion aufrufen. Kost doch nix.
3. Dazu erstelle ich in dem Batch temporär eine Datei mit der Endung *.vbs oder *.js und rufe dann den Skript-Interpreter auf.

01.
... im Batch.. 
02.
@Echo off & setlocal 
03.
Echo Wscript.Echo DatePart(wscript.Arguments(0),Date) >%temp%\miniDateInfo.vbs
..Damit erzeuge ich eine Datei "minidateInfo.vbs" im %temp%-Verzeichnis. Im %temp%-Verzeichnis, weil ich die hinterher wieder lösche.
01.
'-----Inhalt der minidateInfo.vbs----- 
02.
Wscript.Echo DatePart(wscript.Arguments(0),Date)
...das heißt, dieses Script gibt das aktuelle Datum "formatiert" zurück in dem Format, dass ich als Parameter mitgebe.

4. Ich rufe das Script zweimal..erst mit dem Paramter "w" wie "Wochentach" und dann mit dem Parameter "m" wie "Monat".
5. Ich speichere den jeweils numerischen Rückgabewert
- und zwar 6 für den Wert für "Freitag" in der Variablen "DoW" (DayofWeek)
- und 11 für den Monatswert in der Variablen %Monat%
- und lösche das *.vbs wieder.
01.
for /f %%i in ('cscript //nologo %temp%\miniDateInfo.vbs "w"') do Set "DoW=%%i" 
02.
for /f %%i in ('cscript //nologo %temp%\miniDateInfo.vbs "m"') do Set "Monat=%%i" 
03.
Del %temp%\miniDateInfo.vbs
6. Und den Wochentagswert bzw. Monatswert übersetze ich in etwas menschenlesbares.
01.
IF %DoW%==1 Set "cDow=Sonntach"  
02.
IF %DoW%==2 Set "cDow=Montach"  
03.
IF %DoW%==3 Set "cDow=Dienstach"  
04.
IF %DoW%==4 Set "cDow=Mittwoch"  
05.
IF %DoW%==5 Set "cDow=Donnerstach"  
06.
IF %DoW%==6 Set "cDow=Freitach"  
07.
IF %DoW%==7 Set "cDow=Samstach" 
08.
 
09.
IF %Monat%==1 Set "cMonat=Jänner" 
10.
IF %Monat%==2 Set "cMonat=Februar" 
11.
::.... 
12.
IF %Monat%==11 Set "cMonat=November" 
13.
IF %Monat%==12 Set "cMonat=Dezember"
Danach hast Du in den Variablen %cDoW% und %cMonat% eben die Texte "Freitag" und "November" stehen...
...und das wollte ich zeigen...
01.
echo Demo1: Monat %Monat% -^> cMonat %cMonat% DoW: %DoW% -^> cDoW: %cDoW%
Dann kann Dein eigentliches Skript starten.

Das war das, was ich schreiben wollte.
Und das Tutorial, das ich meinte, steht unten als zweites unter "Beiträge im gleichen Bereich" in der Liste.

Gruß
Biber
Bitte warten ..
Mitglied: Brutschi
18.11.2006 um 16:07 Uhr
danke habe gerade im tut III gelesen und veuchte es zu verstehen. Danke nochmal für die ausfühliche erklärung jetzt ist mir einiges klarer geworden dennoch brauche ich noch ein wenig Übung.
die variablen %cDoW solte ich dann in mein skript einsetzen zur Erzeugung der Verzeichnisse zb mit mkdir ? oder liege ich da falsch ?
Bitte warten ..
Mitglied: Brutschi
18.11.2006 um 16:19 Uhr
meine Ausgabe der miniDateInfo.vbs

Wscript.Echo DatePart(wscript.Arguments(0),Date)

also noch nicht Samstag und November
Bitte warten ..
Mitglied: Biber
18.11.2006 um 16:41 Uhr
Ja, Brutschi,
die Variablen %cDoW% und %cMonth% kannst Du zum z.B zum Anlegen oder Prüfen der Unterzeichnisse verwenden.
Beim Xcopy wird ja implizit ein Verzeichnis angelegt (falls nicht vorhanden).
Dort reicht dann also ein
01.
XCopy <i>[xcopyparameter] quellVerzeichnis\*.*</i> %meinLw%\%cDow%\ 

...wenn denn z.B. alles in das Verzeichnis "Samstag" gesichert werden soll.

Oder eben die Prüfung, ob Unterverzeichnis %meinLw%\November existiert mit..
01.
if exist %meinLw%\%cMonth% goto MonatssicherungSchonVorhanden
Zum zweiten Posting.. probier bitte am CMD-Prompt:
01.
>echo Wscript.Echo DatePart(wscript.Arguments(0),Date)>minidate.vbs 
02.
 
03.
>cscript //nologo minidate.vbs "w" 
04.
7 ---------------> sollte ausgegeben werden 
05.
 
06.
>cscript //nologo minidate.vbs "m" 
07.
11 ---------------> sollte ausgegeben werden
Wenn nicht, bin ich erstaunt.
Gruß
Biber
Bitte warten ..
Mitglied: Brutschi
18.11.2006 um 17:10 Uhr
Habe einen Fehler gefunden da windows skrip nicht zugelasen wurde kam auch kein Wochentag usw
Bitte warten ..
Mitglied: Biber
19.11.2006 um 20:02 Uhr
Moin Brutschi,

ich kann mit dieser doch eher prosaischen Information wenig anfangen.
Habe einen Fehler gefunden da windows skrip nicht zugelasen wurde kam auch kein Wochentag usw

Was heißt das? Fehler gefunden und abgestellt? Läuft es jetzt?
Oder darfst Du kein VBScript benutzen? Dann musst Du eben den Wochentag per Batch ermitteln bzw. berechnen.
Geht auch (ist ja auch nur eine Formel, nichts zufälliges). Ist aber etwas unappetitlich.
Oder bist Du von dem Plan abgekommen, die Ordner "Montag", "Dienstag", etc zu nennen?

Sag mal bitte an, welchen Status Dein Problem jetzt hat.

Danke
Biber
Bitte warten ..
Mitglied: Brutschi
19.11.2006 um 23:21 Uhr
Danke für deine Nachfrage, also ich konte kein VB Skript ausführen da mit Xp Antispay ausgeschaltet. Jetzt ist der Stand so, das ich die Datensicherung von Montag bis Freitag bekomme. Habe auch deine Idee goto MonatssicherungSchonVorhanden aufgenommen und umgesetzt, werde Montag nocheinmal einen Durchlauf starten und sehen wie es ist, denke aber das alles so funktioniert wie ich es gedacht hatte. Werde allerings noch darüber nachdenken ob ich nicht alte Daten ( älter als 2 Monate per skript löschen lasse ) damit die Datenflut nicht ins Uferlose läuft.
Danke bis jetzt und hoffe ich darf noch weiter deine Zeit bemühen falls es nicht so funktioniert wie ich denke.
Bitte warten ..
Mitglied: Biber
19.11.2006 um 23:47 Uhr
Danke für die Rückmeldung, Brutschi.

Dann setze ich den Beitrag erstmal auf "gelöst" und schließe ihn aber nicht.

Wie ich in diesem und auch in ähnlichen Beiträgen schon geschrieben habe... mit purem Batch SOLLTE man/frau keine Datumsberechnungen versuchen.
Wenn es irgendwie machbar/vertretbar ist, muss dafür dann VBS/JS eingespannt werden.
Wenn Du es also nutzen kannst, dann geht die ganze Aktion noch relativ stressarm ab.

Früher oder später wird irgend jemand kommen mit der Behauptung
"ich muss aber unbedingt den Wochentag vom nächsten Ersten ermitteln und darf aber keine Utilities und kein VBSkript benutzen..."

..und dann werde ich auch irgendeinen abgedrehten Batch-10-Zeiler posten mit kunstvoll ineinander geschraubten FOR-Anweisungen, der so etwas formelmäßig berechnet.
Möge dieser Tag in weiter Ferne sein oder dieser Kelch ganz an uns vorübergehen..

Also, wenn es bei Dir weitere Fragen gibt: der Thread bleibt offen bis zu Deinem endgültigen OK.

Gruß
Biber
Bitte warten ..
Mitglied: ahe
20.11.2006 um 12:34 Uhr
@Biber, wann machst Du eigentlich mal eine Pause

Ich habe da was gefunden...
http://www.commandline.co.uk/lib/treeview/index.php?contents.php&.. ...

Die set /a Anweisungen sind leider nicht besonders verständlich (habe doch erst die Paramter nachschauen müssen...), darum ein kurzer Hinweis:


Die Berechnung modulo 100 wird zum Löschen der führenden Nullen bei Tagen und Monaten durchgeführt, z. b.:
01.
set /a dd=100%dd%%%100,mm=100%mm%%%100
aus dem Datum 04.01 wird das Datum 4.1.
dd=04: 10004%100 = 10004 modulo 100 = 4
mm=01: 10001%100= 10001 modulo 100 = 1

Der Algorithmus selbst war mir bislang nicht bekannt, oder hab' ich ihn vergessen...?
01.
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2 
02.
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1

Berechnung des Tages anhand des 20.11.2006

01.
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2 
02.
 
03.
z = 14 - 11 = 3 
04.
z = 3/12 = 3 div 12 = 0 
05.
y = 2006 + 4800 - 0 = 6806 
06.
m = 11 + 12*0 - 3 = 8 
07.
dow = 153*8 + 2 = 1226 
08.
 
09.
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1 
10.
 
11.
dow = 1226/5 + 20 + 6806*365 + 6806/4 - 6806/100 + 6806/400 - 2472630  
12.
    = 245 + 20 + 2484190 + 1701 - 68 + 17 - 2472630  
13.
    = 13475 
14.
dow = dow % 7 = dow modulo 7 = 0 
15.
dow = dow + 1 = 1
http://www.commandline.co.uk/index.html

DateToDOW


The DateToDOW function returns the day of week number for a given calendar date..

01.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:DateToDOW %yy% %mm% %dd% dow 
03.
:: 
04.
:: By:   Ritchie Lawrence, 2003-04-29. Version 1.1 
05.
:: 
06.
:: Func: Creates a day of week number from a calendar date, where 1 = Mon 
07.
::       and 7 = Sun. For NT4/2000/XP/2003. 
08.
:: 
09.
:: Args: %1 year component to be converted, 2 or 4 digits (by val) 
10.
::       %2 month component to be converted, leading zero ok (by val) 
11.
::       %3 day of month to be converted, leading zero ok (by val) 
12.
::       %4 var to receive day of week number, 1 to 7 (by ref) 
13.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
14.
setlocal ENABLEEXTENSIONS 
15.
set yy=%1&set mm=%2&set dd=%3 
16.
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%) 
17.
set /a dd=100%dd%%%100,mm=100%mm%%%100 
18.
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2 
19.
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1 
20.
endlocal&set %4=%dow%&goto :EOF 
21.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 	

Parameters


%1 year component to be converted, 2 or 4 digits (by val)
%2 month component to be converted, leading zero ok (by val)
%3 day of month to be converted, leading zero ok (by val)
%4 var to receive day of week number, 1 to 7 (by ref)



Aufruf:

01.
DateToDOW 2006 11 20 Tag 
02.
 
03.
echo Der aktuelle Wochentag: %Tag% 
04.
Der aktuelle Wochentag: 1
Schön, dass man heute wieder etwas ins Forum schreiben kann, am Freitag ist mir das den ganzen Nachmittag (bis ca. 19:00) nicht gelungen...

Mit freundlichen Grüßen
Axel
Bitte warten ..
Mitglied: Brutschi
20.11.2006 um 13:05 Uhr
Hallo Axel
Danke für deine Hilfe bin mit meiner batch soweit Fertig Trotzdem danke für deine Unterstützung.
Bitte warten ..
Mitglied: Biber
20.11.2006 um 21:28 Uhr
@AxelHahn

Na ja, wollen wir mal für Ritchie hoffen, dass er noch andere Hobbies hat....

Wenn ich versuchen würde, den Wochentag und den Monatsnamen mit purem Batch zu ermitteln, würde ich gut die doppelte Zeilenanzahl brauchen...
Und selbst in meiner lyrischen Programmierweise wird es eventuell verwirrend für Einsteiger.

Bei mir würde etwas in dieser Art rauskommen:
01.
:: ------snipp ErmittlungWochentagsUndMonatsNamenMitNativeBatch.bat 
02.
:: Batch-Implementierung nach http://de.wikipedia.org/wiki/Wochentagsberechnung Biber 2006 
03.
@echo off & Setlocal & set /a "MyLeapkorr=0"  & Set "mydate=%1" 
04.
If [%1]==[] (for %%i in (%date%) do set "mydate=%%i") 
05.
for /f "tokens=1-3 delims=." %%i in ("%mydate%") do set /a "myTT=10%%i %% 100,myMM=10%%j %% 100,myJJ=%%k" 
06.
REM Nebenrechnungen:  
07.
REM Step1: myTZ=Tagesziffer = myTT mod 7 
08.
REM Step2: Monatsziffer = Jan=0  Feb=3  Mrz=3  Apr=6  Mai=1  Jun=4  
09.
REM   myMZ           Jul=6  Aug=2  Sep=5  Okt=0  Nov=3  Dez=5 
10.
REM Step3: myJHZ=Jahrhundertziffer = Jahrhundert mod 4-3) *-2 
11.
REM Step4: myJZ=Jahrsziffer = Jahreszahl + Jahreszahl div 4 mod 7.  
12.
REM Step5  myLeapyear.... wenn Schaltjahr und der Monat=Jan oder Feb ist, dann 6 addieren. 
13.
REM  
14.
FOR %%a in (1:Januar:0 2:Februar:3 3:März:3 4:April:6 5:Mai:1 6:Juni:4 7:Juli:6 8:August:2 ^ 
15.
               9:September:5 10:Oktober:0 11:November:3 12:Dezember:5) do ( 
16.
For /f "Tokens=1-3 delims=:" %%i in ("%%a") do if %MyMM%==%%i set /a "MyMZ=%%k" & set "MycMonth=%%j") 
17.
If %myMM% LEQ 2 for /f %%i in ('set /a myJJ %% 4') do ( 
18.
     if %%i == 0 for /f %%j in ('set /a myJJ %% 100') do if %%j GTR 0 set /a "myLeapKorr=6")   
19.
 
20.
If [%2]==[] goto skip 
21.
For /f %%i in ('Set /a myTT %% 7') do Echo [Step1: Tagesziffer MyTZ von %mydate% = %%i] 
22.
Echo [Step2: Monatsziffer MyMZ von %mydate% = %myMZ%] 
23.
For /f %%i in ('Set /a ^(^(^(myJJ / 100^) %%4^) -3^) * -2') do Echo [Step3: Jahrhundertziffer MyJHZ von %mydate% = %%i] 
24.
For /f %%i in ('Set /a ^( myJJ %% 100 + myJJ %% 100 / 4^) %% 7') Do Echo [Step4: Jahresziffer MyJZ von %mydate% = %%i] 
25.
echo [Step5: Schaltjahreskorrektur %myLeapKorr%] 
26.
 
27.
:skip 
28.
Set /a "myDoW=(myTT %% 7 + myMZ + (myJJ%%100 + myJJ%%100 / 4) %% 7 + ( myJJ /100 %%4 -3) * -2 + myLeapkorr) %% 7" 
29.
For  %%i in (0:Sonntag 1:Montag 2:Dienstag 3:Mittwoch 4:Donnerstag 5:Freitag 6:Samstag) do ( 
30.
    for /f "tokens=1-2 delims=:" %%j in ("%%i") do (if %%j==%myDoW% Set "mycDoW=%%k")) 
31.
echo Datum: %mydate% DoW: %mydow% Wochentag: %mycDow% Monatsname: %MycMonth%
...und je nachdem, ob einen zweiten Parameter mitgebe oder nicht, eine Kommentierung der Zwischenschritte rausfallen oder halt nicht.
01.
(=21:10:39  D:\temp=) 
02.
>f:\ErmittlungWochentagUndMonatsnamenMitNativeBatch.bat 9.11.1989 verbose 
03.
[Step1: Tagesziffer MyTZ von 9.11.1989 = 2] 
04.
[Step2: Monatsziffer MyMZ von 9.11.1989 = 3] 
05.
[Step3: Jahrhundertziffer MyJHZ von 9.11.1989 = 0] 
06.
[Step4: Jahresziffer MyJZ von 9.11.1989 = 6] 
07.
[Step5: Schaltjahreskorrektur 0] 
08.
Datum: 9.11.1989 DoW: 4 Wochentag: Donnerstag Monatsname: November 
09.
 
10.
(=21:12:14  D:\temp=) 
11.
>f:\ErmittlungWochentagUndMonatsnamenMitNativeBatch.bat %date% 
12.
Datum: 20.11.2006 DoW: 1 Wochentag: Montag Monatsname: November 
13.
 
14.
(=21:23:17  D:\temp=) 
15.
>f:\ErmittlungWochentagUndMonatsnamenMitNativeBatch.bat 11.9.2001 
16.
Datum: 11.9.2001 DoW: 2 Wochentag: Dienstag Monatsname: September 
17.
 
18.
(=21:23:36  D:\temp=) 
19.
>f:\ErmittlungWochentagUndMonatsnamenMitNativeBatch.bat 11.9.2001 debug 
20.
[Step1: Tagesziffer MyTZ von 11.9.2001 = 4] 
21.
[Step2: Monatsziffer MyMZ von 11.9.2001 = 5] 
22.
[Step3: Jahrhundertziffer MyJHZ von 11.9.2001 = 6] 
23.
[Step4: Jahresziffer MyJZ von 11.9.2001 = 1] 
24.
[Step5: Schaltjahreskorrektur 0] 
25.
Datum: 11.9.2001 DoW: 2 Wochentag: Dienstag Monatsname: September
Aber, wie ich schon mehrfach hier im Forum geschrieben habe:
Wer solche Aktionen mit native Batch versucht, muss entweder ganz fit im Bätchen sein oder ganz schön blöd.

Diese Variante also wirklich nur aus sportlichen Gründen... bitte nicht an die c't verkaufen.

Grüße
Biber
Bitte warten ..
Mitglied: Brutschi
23.11.2006 um 14:48 Uhr
Hallo Bieber leider hat sich bei mir ein Fehler eingeschlichen den ich immer wieder übersehe .
Und zwar wollte ich das bei der Sicherung der Monat estellt wird und die Daten da hinnein kopiert werden. Das tut es auch, allerdings jeden Tag und das wollte ich nicht nur beim leeren Monat. Kannst du bitte mal einen Blick drauf werfen wo der Fehler ist.

For %%x in ( J K L M N O P Q R S T) do if exist %%x:\exist.txt Set "meinLw=%%x" & goto weiter
goto keinLaufwerkDa

:weiter
echo Laufwerk gefunden...Laufwerk ist %meinLw% ...

if exist %meinLw%\%cMonth%\ goto MonatssicherungSchonVorhanden


rem xcopy b:\*.* %meinLw%:\%cMonat%\*.* /S/V/E/Y/D/C


:MonatssicherungSchonVorhanden

rem xcopy b:\*.* %meinLw%:\%cDow%\*.* /S/V/E/Y/D/C
Bitte warten ..
Mitglied: Biber
23.11.2006 um 15:37 Uhr
Sorry, brutschi,

mein Fehler.
Ich habe oben in den Beispielschnipseln mal den Monatsnamen (z.B. "November") in eine Variable %cMonth% und mal in eine Variable %cMonat% geschrieben.

Das hat sich auch bei Dir vermischt.
Du prüfst
...
if exist %meinLw%\%cMonth%\ goto MonatssicherungSchonVorhanden
... und kopierst aber nach
xcopy b:\*.* %meinLw%:\%cMonat%\*.*

.... da liegt der Fehler vermutlich.
Prüfe von oben (ggf. mit "Suchen nach" in Deinem Texteditor), welche Variable verwendet wird und zieh das glatt.
Dann sollte es laufen.

Gruß
Biber
Bitte warten ..
Mitglied: Brutschi
23.11.2006 um 16:17 Uhr
Jo so ist es.
Danke habe ich glatt überlesen.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...