Top-Themen

Aktuelle Themen (A bis Z)

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, 9844 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

mfg

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 ..
Ähnliche Inhalte
Batch & Shell
Doppelpunktgetrennte Textdatei einlesen Batch
gelöst Frage von Fabian-HaasBatch & Shell3 Kommentare

Hallo, ich habe eine Textdatei auf einem Server, die sieht so aus und möchte aus einer bestimmten Zeile das ...

Microsoft Office
VBA - aktuelle Kalenderwoche ermitteln
gelöst Frage von Ghost108Microsoft Office3 Kommentare

Hallo zusammen, wie kann ich mit Hilfe von VBA die Kalenderwoche des aktuellen Datums ermitteln?

Windows Tools
Aktuelles Verzeichnis in Batchdatei
gelöst Frage von SnuffchenWindows Tools7 Kommentare

Hallo zusammen, ich habe das Problem das ich innerhalb einer Batch-Datei das aktuelle Verzeichnis der Batch-Datei ermitteln muss. Führe ...

Batch & Shell
Xcopy mit aktuellem Datum
gelöst Frage von deniska93Batch & Shell1 Kommentar

Hallo liebes Forum, kann mir einer von Euch zufällig ein xcopy Script erstellen? Kenne mich mit xcopy leider nicht ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 13 MinutenWindows 10

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 StundeSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 16 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 19 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...