Supportnet Computer
Planet of Tech

Supportnet / Forum / BS-Sonstige

Variable Anweisung in Batch- Datei?





Frage

Einen schönen Morgen an alle. Ich benötige mal Hilfe von den Dos Spezialisten. Ich habe nachfolgende Batch- Datei: MD D:\Aussentemperaturarchiv\2004\Januar Von diesen Dateien habe ich für jeden Monat eine. Jetzt meine Frage, kann man den Eintrag 2004 in der Anweisung irgendwie variabel gestalten Was ich meine, anstelle 2004 wäre es super, wenn dort das aktuelle Jahr automatisch vergeben würde. Sprich also für dieses Jahr 2004, fürs nächste 2005, dann 2006 usw. So wie die Batch- Datei im Moment ist, muss ich 2005 daran denken, alle 12 Dateien zu ändern. Das möchte ich mir ersparen. Danke Euch schon mal für Eure Hilfe, coros [sup]Jeder macht was er will, keiner macht was er soll, aber alle machen mit.[/sup]

Antwort 1 von Undertaker

Hi,

wenn Du statt DOS vielleicht doch den Interpreter von Windows 2000/XP meinst, geht das recht einfach. Es geht ja eigentlich nur darum, Monat und Jahr separat als Wert in eine Variable zu bekommen...

Unter Windows 2000/XP ist das recht easy mit Boardmitteln lösbar:
FOR /F "tokens=3 delims=. " %%a in ('date/T') DO set m=%%a

IF %m%==01 SET monat=Januar
IF %m%==02 SET monat=Februar
IF %m%==03 SET monat=März
IF %m%==04 SET monat=April
IF %m%==05 SET monat=Mai
IF %m%==06 SET monat=Juni
IF %m%==07 SET monat=Juli
IF %m%==08 SET monat=August
IF %m%==09 SET monat=September
IF %m%==10 SET monat=Oktober
IF %m%==11 SET monat=November
IF %m%==12 SET monat=Dezember

FOR /F "tokens=4 delims=. " %%a in ('date/T') DO set jahr=%%a

MD D:\Aussentemperaturarchiv\%jahr%\%monat%
Für die Selektion Monat => Text gibt es bestimmt auch noch eine elegantere Lösung, aber da bin ich überfragt.


Unter DOS ist das schon schwieriger und m.W. nicht ohne zusätzliche Programme lösbar.
Es gibt beispielsweise das Programm SETWORD.COM, mit dem man aus einer Zeichenkette den x-ten Wert auslesen kann. Allerdings kennt SETWORD.COM als Trennzeichen nur das Leerzeichen, das Komma und das Semikolon. Es wird aber der Punkt benötigt, um das Datum in Tag, Monat und Jahr zerlegen zu können.
Man kann zwar nicht mehr Trennzeichen einfügen, als diese drei, aber man kann diese Zeichen durch andere Zeichen ersetzen. Benötigt man beispielsweise das Semikolon nicht, kann man es durch den Punkt ersetzen:
Original:
e145 1 "E+"C9 AC "< t"FB "<,t"F7 "<;t"F3 "<=t"EF "<"D "t"EB "<"A
e160 "t"E7 "N"89 F2 80 "<"1A "t F"8A 4 "< t"14 "<,t"10 "<;t"C "<="
Korrektur:
e145 1 "E+"C9 AC "< t"FB "<,t"F7 "<.t"F3 "<=t"EF "<"D "t"EB "<"A
e160 "t"E7 "N"89 F2 80 "<"1A "t F"8A 4 "< t"14 "<,t"10 "<.t"C "<="

Mit dem so veränderten Programm sähe der Code für DOS oder Win9x/ME so aus:
DATE /T | SETWORDPKT 3 >TMP.BAT
call TMP.BAT m
del TMP.BAT

IF %m%==01 SET monat=Januar
IF %m%==02 SET monat=Februar
IF %m%==03 SET monat=März
IF %m%==04 SET monat=April
IF %m%==05 SET monat=Mai
IF %m%==06 SET monat=Juni
IF %m%==07 SET monat=Juli
IF %m%==08 SET monat=August
IF %m%==09 SET monat=September
IF %m%==10 SET monat=Oktober
IF %m%==11 SET monat=November
IF %m%==12 SET monat=Dezember

DATE /T | SETWORDPKT 4 >TMP.BAT
call TMP.BAT jahr
del TMP.BAT

MD D:\Aussentemperaturarchiv\%jahr%\%monat%

Allerdings hat das Programm auch einen Schönheitsfehler, denn es legt im temporären Verzeichnis des Systemroot (bsp. C:\WINNT\TEMP) Informationen ab, die nicht mehr gelöscht werden. Diese Dateien benennt SETWORD wie folgt: scs*.tmp, wobei * eine eindeutige Nummer ist.
Deshalb sollten diese Dateien mit DEL LW:\PFAD\scs*.tmp /F /Q gelöscht werden. Entweder beim Systemstart oder, wenn sichergestellt ist, das SETWORD.COM nicht ein zweites mal aktiv ist, am Ende der Batchdatei.

Gruß
Undertaker

Antwort 2 von Undertaker

Nachtrag:

eine elegantere Lösung für die Auswahl des Monats:

Windows 2000/XP:
FOR /F "tokens=%m% delims= " %a in ('ECHO Januar Februar März April Mai Juni Jumi August September Oktober November Dezember') DO set monat=%a


DOS oder Win9x/ME
ECHO Januar Februar März April Mai Juni Jumi August September Oktober November Dezember | SETWORD %m% >TMP.BAT
CALL TMP.BAT monat
DEL TMP.BAT


Gruß
Undertaker

Gib einem Hungrigen einen Fisch, und er ist für einen Tag satt. Zeig ihm, wie man angelt, und er pöbelt Dich an, dass er besseres zu tun hätte, als Schnüre ins Wasser hängen zu lassen. [David Kastrup]

Antwort 3 von coros

Hi Undertaker,

sorry, dass ich mich erst jetzt melde, hatte aber leider vorher keine Zeit. Danke Dir erst einmal für Deine Lösungsvorschläge. Du hast Dir auch mehr Arbeit gemacht, als nötig. Denn, es handelte sich lediglich um die Jahreszahl, nicht um die Monate. Aber egal. Jetzt habe ich dazu allerdings noch eine Frage. In Deiner ersten Antwort schreibst Du von einem Interpreter. Was ist das und gibt es den auch bei Windows NT. Das mit dem zusätzlichen Programm um das in DOS zu realisieren, kommt eher nicht in Frage. Mal zum besseren Verständnis, die Batch- Dateien werden aus einem anderen Programm jedes mal wenn der Monat wechselt, gestartet. Diese legen mir dann ein Verzeichniss an, in dem jeden Tag von diesem Programm Daten in eine CSV- Datei geschrieben werden.

Wenn Du mir die Fragen noch beantworten könntest, wäre ich Dir dankbar,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 4 von Undertaker

Hi,

mit dem Interpreter meinte ich eigentlich die Konsole. Also kein echtes DOS...

Meinst Du Win NT4? Dann wirst Du wahrscheinlich SETWORD.COM brauchen, da FOR /F ... wahrscheinlich erst ab Win 2000 funktioniert...
Darf ich wissen, weshalb Du SETWORD.COM nicht einsetzen willst?
Ok, es gibt auch noch die Möglichkeit, z.B. KiXtart (V3.62 für DOS) einzusetzen. Das ist ein Interpreter, der viel mehr Möglichkeitet als MS-DOS bietet. Aber das wäre für Deine Anforderung wie mit Kanonen auf Spatzen zu schießen...

>> jedes mal wenn der Monat wechselt

Schon verstanden. Das Programm, das die CSV-Dateien erstellt startet die Batch an jedem 1. eines Monats ein mal.
Dann funktiniert die Batchdatei doch. Es wird aus dem Systemdatum Monat und Jahr extrahiert. Startet die Batch im Januar (egal an welchem Tag im Monat), wird der Ordner für das Jahr und darin der Ordner "Januar" erzeugt. Im Februar ist der Ordner für das Jahr bereits vorhanden und es wird nur der Ordner "Februar" erstellt. Wird die Batch öfter als einmal pro Monat gestartet, wird lediglich gemeldet, das der Ordner bereits vorhanden ist.

Oder reden wir jetz völlig aneinander vorbei?

Gruß
Undertaker

Antwort 5 von coros

Moin Undertaker,

hier ein kuzres Feedback zu Deinen Lösungsvorschlägen. Ich benutze jetzt die Anweisung, die in der Dos Konsole ausgeführt wird, also Dein erster Vorschlag. Der funktioniert auch bei Windows NT SP6a hervorragend. Den zweiten Vorschlag, also der mit der SETWORD.COM Datei, habe ich zwar ausprobiert, hat aber irgendwie bei mir nicht funktioniert. Vielleicht habe ich aber auch beim Aussführen irgend etwas falsch gemacht. Ist aber auch egal, weil wie schon gesagt, der erste Vorschlag funktoniert ja super.

Danke Dir noch mal für Deine schnelle und kompetente Hilfe,
coros

Antwort 6 von Undertaker

Hi,

prima, das es funktioniert und Danke für die Rückmeldung.

Gruß
Undertaker

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: