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

Aktuelles Datum in eine Textdatei einlesen, davon die Jahreszahl ermitteln und in einer Batchdatei damit weiterarbeiten

Frage Entwicklung Batch & Shell

Mitglied: Macabre

Macabre (Level 1) - Jetzt verbinden

13.12.2005, aktualisiert 15.12.2005, 9783 Aufrufe, 9 Kommentare

Oje oje, der Titel ist so lang wie mein Wissen über Batch kurz; also, das Problem ist Folgendes: Ich lasse mit Hilfe der Date /t Funktion ein Datum in eine Textdatei schreiben. Von diesem Datum möchte ich allerdings nur die letzten 4 Zeichen, sprich die Jahreszahl haben. Warum? Mittels einer Batchdatei soll überprüft werden, ob das Datum ungleich der Jahreszahl "2006" ist. Ist es also nicht "2006", soll das Programm mit goto [Textmarke] fortgesetzt werden, ist es 2006, soll es mit Exit beendet werden.

Da ich wirklich kaum etwas von Batchprogrammierung verstehe und ich mich erst gestern an das Problem gewagt habe, hoffe ich dass man mir da ein wenig weiterhelfen kann Von daher kann ich auch kaum etwas an Code beisteuern (zumindest nichts brauchbares).

Das System mit dem ich arbeite ist XP, die Datei die ausgelesen werden soll, trägt den namen datum.txt und kann irgendwo erstellt werden (Bsp. C:\bla\datum.txt), man sollte sie nur wieder finden. ;)

Wäre euch dankbar wenn ihr mir helfen könntet


EDIT: Erster Ansatz:

@echo off
@echo Test des Datums

rem aktuelles Datum speichern, Umleitung in Datei
date /t>J:\datum.txt

rem Jahreszahl ermitteln
@for %%i in (J:\datum.txt) do set last4=%%i
@set last4=%last4:~-4%
pause

rem Exit bei 2006
if last4=="2006" goto ende
echo Jahr ist nicht 2006, Programm wird forgesetzt.
pause
del J:\datum.txt
exit

:ende
echo Programm wird abgebrochen.
del J:\datum.txt
pause
exit

Allerdings gibt das Programm immer nur "Jahr ist nicht 2006, Programm wird fortgesetzt" aus, auch wenn ich in die Textdatei manipulativ eine "2006" schreibe und die Zeile "date /t>J:\datum.txt" auskommentiere. Ich weiß nich mehr weiter. :/

EDIT2: Zweiter Ansatz, erste Lösung.

Da leider niemand helfen konnte hab ich es letztendlich doch anders gemacht als geplant. Da der Code ursprünglich dafür genutzt werden sollte zu kontrollieren, dass ein bereits fertiges Programm nur noch in diesem Jahr, sprich 2005, gestartet werden kann (weil: nächstes Jahr gibts ein Neues ;), habe ich einfach alle möglichen Datumsangaben von heute bis zum 31.12.2005 in eine Textdatei geschrieben und lass mit folgendem Programm das heutige Datum in dieser textdatei suchen:

@echo off
@echo Test des Datums

rem Variable setzen
set heute=%date%

rem Untersuchung ob Systemdatum zu den zulässigen Daten gehört
findstr %heute% J:\zuldatum.txt>ergebnis &&goto weiter
echo Programm wird abgebrochen.
pause
exit

:weiter
echo Jahr ist nicht 2006, Programm wird forgesetzt.
pause

exit


Die Lösung ist nicht die schönste, aber ich wollte das Thema nicht unbeantwortet hier stehen lassen. Wer dennoch weiß und mir sagen kann was man im ersten Versuch hätte besser machen können, der kann das ja trotzdem noch posten.
Mitglied: Biber
13.12.2005 um 13:18 Uhr
Hm, macabre,

ich würde die wesentliche Prüfung (ob richtige Jahreszahl in der Textdatei ist) in einer Zeile abfackeln.

for /F "tokens=3 delims=/." %%i in ("%date%") do @find "%%i" j:\datum.txt>nul || goto ende

~~~
Herleitung:
In der FOR /F-Schleife zerlege ich das aktuelle Datum und unterstelle, dass die Jahreszahl am Ende steht und die Datumstrenner "/" oder "." sind. Das Datum kann also im Format "Di, 13.12.2005" oder "13/12/2005" kommen... das dritte Token davon ist immer die Jahreszahl 2005. (Also immer natürlich nicht, aber 85% Trefferquote habe ich. Für 98,7% siehe TutIII in "Batch und Shell")
Mit "Find" prüfe ich, ob "2005" in der Textdatei enthalten ist.
Wenn nicht ("||" ) ---------> gehe ich zu ":ende"

HTH Biber
Bitte warten ..
Mitglied: Macabre
13.12.2005 um 20:26 Uhr
Vielen vielen Dank Biber!

Also auf sowas wäre ich ja nie gekommen... und ist auch viel komfortabler und effizienter als alle Daten in die txt manuell einzugeben und prüfen zu lassen. Aber wie gesagt ich mach das erst seit gestern. Programm wurde also nochmal geändert und läuft jetzt auch ohne vorgefertigte txt. Nochmals Danke, Biber!
Bitte warten ..
Mitglied: Biber
13.12.2005 um 23:51 Uhr
Gern geschehen, macabre,

Du kannst Dich ja an irgendwelchen verregneten Vorweihnachtstagen ein bisschen durch die Tutorials im Bereich "Batch & Shell" quälen - ein paar Kniffe stehen da schon drin, auf die man/frau sonst weder beim ersten noch beim dritten oder siebten Mal kommt.
Und dann fängt nämlich das Level an, wo selbst bätchen anfängt Spaß zu machen.

Schönen Abend Dir
Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: f.e.dorr
14.12.2005 um 00:01 Uhr
hallo herr BIBER!

könnten sie bitte noch einem verzweifelten datumd-uhrzeitverwender weiterhelfen?

ich sitze jetzt seit stunden dran, einen dos-batch zu erstellen, der eine datei mit fixem namen auf dateinamen-datum-zeit.txt umbenennt, hab auch schon einiges aus ihrer trickkiste probiert, scheiter beim kopieren aber immer an leerstellen im dateinamen, z.b. hinter derm monat, tag, der stunde ....

das ist doch sicher sooo simpel....

könnten sie mir bitte einen tipp geben???

vielen dank

dorr2@afflerbach.de

friedrich.e.dorr
Bitte warten ..
Mitglied: Biber
14.12.2005 um 01:14 Uhr
@f.e.dorr
Moin, der Herr,

klar kann ich das, aber..
a) nicht um diese Uhrzeit - da schlaf ich eigentlich immer schon...
b) nicht ohne ein paar Anhaltspunkte:
Was gibts schon an "Gerüst" vom Batch??.. kann ja auch Pseudocode sein..
Wie soll das gewünschte Ziel aussehen ("2005-12-13_alterdateiname.xyz" oder "Di 13.12.2005 alterdateiname 23h39.xyz"...oder oder oder..
c) und nur in diesem Thread, wenn es hier auch reinpasst - sonst bitte einen neuen aufmachen.

Und Sie dürfen ruhig Du zu mir sagen (immer noch besser als "das da", wie meine Ex-Schwiegermutter immer gesagt hat..) ;- )

Grüße Biber
P.S. Der Vorab-Tipp: Dateinamen, die Leerzeichen beinhalten, müssen in Anführungszeichen eingeschlossen werden. Beispiel: copy "c:\Dokumente und Einstellungen\*.txt" d:temp

P.P.S. Darf aber nichts zu Komplexes sein, habe heute abend Weihnachtsfeier, da muss ich pünktlich sein.
Bitte warten ..
Mitglied: f.e.dorr
14.12.2005 um 12:20 Uhr
hallo 'BIBER'!
super, das du mir helfen wirst
ich glaube, das skript, das du jetzt siehst ist ganz genau deines ... hab nur schon stundenlang vergeblich versucht, mir eine zeichenkette wie "jjjmmtt-hhmmss" zusammenzubauen, um ganz simpel über einen batch eine datei zu weg-zukopieren mit irgendeiner form von datum und uhrzeit, gerne auch mit sekunde ... die reihenfolge ist nicht so wichtig ....
hier dass (ihrige) skript ...

::-------snipp GetAllDateTimeInfos.bat -----
@echo on & setlocal
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit.
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die nächte Zeile

[...(gekürzt)........ siehe Batch-TutIII im Bereich "Batch & Shell"]

....
IF not defined YY goto YYskip
IF %YY% LSS 39 set YY=20%YY%
IF %YY% LEQ 99 set YY=19%YY%
:YYskip
If not defined JJ goto JJskip
IF %JJ% LSS 39 set JJ=20%JJ%
IF %JJ% LEQ 99 set JJ=19%JJ%
:JJskip

IF defined YY set JJ=%YY%
IF defined JJ set YY=%JJ%
IF defined DD Set TT=%DD%
IF defined TT Set DD=%TT%
:: Lass sehen, was wir haben....falls kein Parameter /q
For %%i in (%1 %2 %3 %4) Do If /i %%i==/q goto cleanUp

For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i

:::pause
::: echo.| date /T | LMOD Updated: [$4], [$5] [-] >> some.log
:::pause
::: echo.| time /T | LMOD at [$3]>> some.log
pause

:::echo on
:::FOR /F "tokens=1-10 delims=:/.-, " %%i in ("%MM% %TT% %hh%") do set dorr=%MM%%TT%%hh%
:::echo dorr

:::FOR /F "tokens=1-10 delims= " %%i in ("%dorr%") do set dorr2=%dorr%
:::echo dorr2
:::pause

echo on
::::dorr2 = strip$(shiftl$(%JJ%-%DoW%-%cDow%-%TT%_%hh%$%min%))
::::echo dorr2

:::copy sdclog sdclog-%JJ%-%MM%-%TT%_%hh%$%min%.bak
copy sdclog sdclog-%JJ%-%DoW%-%cDow%-%TT%_%hh%$%min%.bak
:::hier ist mein problem,ich hab hinter einigen variablen LEERstellen, die eine
:::erzeugung eines dateinamens verhindern.
:::es wird erzeugt: copy sdclog sdclog-2005-348--14 _11 $02.bak
:::da bitte ich um hilfe, 'herr' BIBER !! herzlichen dank
pause

:cleanUp
For %%i in (vbssnippet INTime INDate) Do Set %%i=
goto :eof
[....(gekürzt)....... siehe Batch-TutIII im Bereich "Batch & Shell"]


::-------snapp GetAllDateTimeInfos.bat


so 20 zeilen höher hab ich mein problemchen beschrieben ...

wäre toll, sie könnten mir >BITTE< weiterhelfen!

vielen dank!

freue mich auch über eine mail an dorr2@afflerbach.de!
02684/84-333

Mit freundlichen Grüßen

friedrich
Bitte warten ..
Mitglied: Biber
14.12.2005 um 18:05 Uhr
Soooooooo, friedrich,

dumm gelaufen bzw. da war ich zu schlampig...
Der Fehler liegt bei mir bzw. in folgenden Blöckchen:
...
IF not defined YY goto YYskip
IF %YY% LSS 39 set YY=20%YY%
IF %YY% LEQ 99 set YY=19%YY%
:YYskip
If not defined JJ goto JJskip
IF %JJ% LSS 39 set JJ=20%JJ%
IF %JJ% LEQ 99 set JJ=19%JJ%
:JJskip

IF defined YY set JJ=%YY%
IF defined JJ set YY=%JJ%
IF defined DD Set TT=%DD%
IF defined TT Set DD=%TT%
...

Da sollten, damit der Sinn auch nach dem Cut & Paste erhalten bleibt, alle "SET"-Anweisungen auch auf die immer von mir beschworene undokumentierte Art in Anführungszeichen gesetzt werden.
Also so:
IF not defined YY goto YYskip
IF %YY% LSS 39 set "YY=20%YY%"
IF %YY% LEQ 99 set "YY=19%YY%"
:YYskip
If not defined JJ goto JJskip
IF %JJ% LSS 39 set "JJ=20%JJ%"
IF %JJ% LEQ 99 set "JJ=19%JJ%"
:JJskip

IF defined YY set "JJ=%YY%"
IF defined JJ set "YY=%JJ%"
IF defined DD Set "TT=%DD%"
IF defined TT Set "DD=%TT%"

Das war das Problem. In meinem Original-Batch waren natürlich keine trailing blanks am Ende der "If defined"-Zeilen.
Beim Cut & Paste kommen aber offensichtlich wieder welche rein.

Ich schreibe auch einen ähnlichen Kommentar unter das Batch-Tutorial und korrigiere es dort.

@friedrich:

Nach dieser Korrektur sollte auch Deine Umbenennerei funktionieren so wie in den letzten Tut-Zeilen vorgeschlagen.
Also
a) den unveränderten Batch "GetAllDateTimeInfos.bat" mit Parameter /s /q ("in Ruhe setzen") aufrufen;
b) irgendwas umbenennen mit Nutzung der Variablen %TT%, %MM%, ... etc, die dann zur Verfügung stehen ohne Leerzeichen.
c) der Ordnung halber danach wieder "GetAllDateTimeInfos.bat" mit Parameter /u wie UNSET aufrufen.

Grüße nach Puderbach
Biber
P.S. Und wenn es dann noch klemmt, kurze pn an mich.
Bitte warten ..
Mitglied: f.e.dorr
15.12.2005 um 17:17 Uhr
hallo 'BIBER'!

vielen, vielen dank! jetzt hab ich das kopieren/wegsichern DANK deiner hilfe am laufen!
SUPER!

viele grüße & frohes fest

friedrich
Bitte warten ..
Mitglied: Biber
15.12.2005 um 17:50 Uhr
Gern geschehen, friedrich,

nur durch solche Rückmeldungen bekommen wir ja ja hier gemeinsam robustere Bätche/Skripte hin, und davon profitieren alle.

grübel ...schade, dass M$ die Fehlermeldungen bekommen hat..
....sonst hätten die jetzt schon ein stabliles Betriebssystem...

Schönen Abend und *winks* in den Westerwald
Biber
P.S. @friedrich: Ich kürze mal Deinen ersten Kommentar auf die bug-haltigen Zeilen des GetAllDateTimeVars.bat. Denn sonst postet hier unter diesen Thread in zwei Monaten wieder einer: "Ich hab da mal ne Frage zu dem Skript.."
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows 10
gelöst Windows 10 - Datum und Zeitfehler bei Update (3)

Frage von swisstom zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...