Wie man/frau ein (Batch-)Programm schreibt

Diskutiere Wie man/frau ein (Batch-)Programm schreibt im Programmierung Forum im Bereich Software Forum; @ cs Fishbone Solche Kommentare machen vieles kaputt, besonders die harte Arbeit! @ Mial :danke bin sehr beeindruckt :repect :beten Hab...
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #21
snadboy

snadboy

Dabei seit
27.11.2004
Beiträge
1.408
Ort
Herten
@ cs Fishbone
Solche Kommentare machen vieles kaputt, besonders die harte Arbeit!


@ Mial

:danke bin sehr beeindruckt :repect
:beten

Hab dich auch leider lange nicht mehr gesehn...



Hab da auch noch nen kleinen Beitrag:


Eine kleine Befehlszeilenreferenz:
Neue Verknüpfung anlegen mit folgendem Pfad:
hh.exe ms-its:C:\WINDOWS\Help\ntcmds.chm::/ntcmds.htm

DOS-Referenzen:
www.wboeden.de/bef08.htm
www.antonis.de/dos/batchtut/pittipla/index.htm
www.libe.net/themen/BATch-Befehle.php

Win98-CD:
Auf dieser CD gibt es eine kleine Befehls-Referenz im Dos-Modus. Den genauen Pfad kenne ich nicht, aber der Ordner hieß "oldmsdos".
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #22
Fireblade

Fireblade

Grüßt die Winboarder
Dabei seit
10.12.2004
Beiträge
19.623
Vielen Dank an Mial.
Das kann man echt gut gebrauchen,da hast Du dir ja wahnsinnig viel Mühe gegeben.Hab das bisher noch nicht gelesen hier.
Den Thread hier hab ich mir sofort gespeichert.

Gruß Fireblade :-)
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #23
W

wormmuk

Dabei seit
29.04.2006
Beiträge
2
Hi, bin neue im Winboard. Habe den Beitrag über Google gefunden.

:up tolle Programmierung.

Habe es gleich mit dem Teil der Datumsauswertung ausprobiert, den ich brauche.

Ich habe mit einen Batch geschrieben, die aller geänderten Datein eines bestimmten Pfades in einen anderen sichert und jeden Tag einen neuen Sicherungpfad (bestehend aus dem Tagesdatum z.B. 20060429) aufmacht.

Bin auf 2 Probleme gestossen:
  1. Auf meinem Rechner (windows 2000) wird dem datum der Wochentag in 2 Buchstaben vorangestellt. z.B. "Sa 29.04.2006". Dadurch hatte ich Probleme, meinen Pfad richtig zu erstellen. Konnte das Problem aber lösen. Wo wird dieses Datumsformat festgelegt?
  2. wenn der Monat nur aus 1 Zeichen besteht, wird für den Monat nicht "04" sondern nur "4" übernommen. Das macht das Sortieren im Laufe des Jahres etwas unüberischtlich. Ich würde das über die Länge der Zeichenkette lösen, weiß aber nicht, wie die entsprechende Funktion dazu heißt.
Freu mich aufAntwort
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #24
T

timi

Dabei seit
05.04.2006
Beiträge
129
ZITAT(wormmuk @ 29.04.2006, 15:41) Quoted post Hi, bin neue im Winboard. Habe den Beitrag über Google gefunden.

:up tolle Programmierung.

Habe es gleich mit dem Teil der Datumsauswertung ausprobiert, den ich brauche.

Ich habe mit einen Batch geschrieben, die aller geänderten Datein eines bestimmten Pfades in einen anderen sichert und jeden Tag einen neuen Sicherungpfad (bestehend aus dem Tagesdatum z.B. 20060429) aufmacht.

Bin auf 2 Probleme gestossen:
  1. Auf meinem Rechner (windows 2000) wird dem datum der Wochentag in 2 Buchstaben vorangestellt. z.B. "Sa 29.04.2006". Dadurch hatte ich Probleme, meinen Pfad richtig zu erstellen. Konnte das Problem aber lösen. Wo wird dieses Datumsformat festgelegt?
  2. wenn der Monat nur aus 1 Zeichen besteht, wird für den Monat nicht "04" sondern nur "4" übernommen. Das macht das Sortieren im Laufe des Jahres etwas unüberischtlich. Ich würde das über die Länge der Zeichenkette lösen, weiß aber nicht, wie die entsprechende Funktion dazu heißt.
Freu mich aufAntwort [/b]

Hallo wormmuk

ich weiß nicht ob ich deine Frage alles richtig verstanden habe, aber zu eins,

DatumsFormat in Win festlegen geht in der Systemsteuerung s. Screenshot

[attachmentid=11477]

und oder im Datum kannst du ja statt TOKENS=1,2,3

Code:
 FOR /F "TOKENS=1,2,3 DELIMS=.-/" %%a IN ("%DATE%") DO (
SET /A tag=%%a
SET /A monat=%%b
SET /A jahr=%%c
)

auch TOKENS=2,3,4 nehmen wenn das Batch ja nur auf deinem PC läuft und soll nicht auf andere PCs mit andere Einstellungen. Dann müßtest du doch auch die richten Teile vom Datum haben?


und zu zwei, Ziffern mit führender Null hat Mial in seine Programm mit Anleitung ja schon geschriebne

Code:
 FOR %%a IN (1 2 3 4 5 6 7 8 9) DO (
IF %monat%==%%a SET monat=0%%a
IF %tag%==%%a SET tag=0%%a
)

 - - - - - - - - - - 

Nun sorgen wir noch dafuer, das die Werte fuer %tag% und %monat% eine fuehrende Null erhalten, falls sie kleiner sind als 10. - Warum ?

Nun - das Ergebnis der Subroutine wird nach dem Ruecksprung zum Wert fuer die Variable %datum% zusammengesetzt in der Form JJJJMMTT.
...

Hilft das, deine Fragen zu lösen? Sonst kannst du ja mal Beispielcode posten. Und Screenies. Oder vielleicht per Mail an Mial fragen? Der programmiert ja das. :aha

gruss timi
:D
 

Anhänge

  • datum.gif
    datum.gif
    89 KB · Aufrufe: 819
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #25
E

eifelyeti

Dabei seit
10.03.2006
Beiträge
1.187
Alter
64
Klasse , Mial :danke :repect ,
Gute Aerbeit , da kann man ja wirklich was draus lernen!
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #26
automatthias

automatthias

vernunftgeplagt
Dabei seit
21.04.2006
Beiträge
12.466
übrigens:

sehr viele nützliche Tipps zur Batchprogrammierung werden seit Jahren von Prof. Timo Salmi in Helsinki gesammelt und stehen hier zum Download:

ftp://garbo.uwasa.fi/pc/link/tscmd.zip
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #27
T

timi

Dabei seit
05.04.2006
Beiträge
129
hallo automatthias

gut, aber bestimmt nix für Anfänger. Sieht für mega fortgeschrittene aus. :D

timi
:sing
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #28
M

Mial

Threadstarter
Dabei seit
14.07.2004
Beiträge
2.132
Hi wormmuk

hab deine PM erhalten. Dass das Datumsformat unter 2K nicht klappt, ist klar. Das Format im Posting von mir war fuer XP und 2K3 geschrieben. Steht auch dabei. :deal

Hab' das fuer dich angepasst. Der Tip von Timi war schon ganz richtig. Nur muss ausser TOKENS auch DELIMS an das Format von win 2000 angeglichen werden.

Code:
 TOKENS=2,3,4 und DELIMS=.-/ "statt 
 TOKENS=1,2,3 und DELIMS=.-/" dann siehst du den Unterschied :)

Ein kleines Leerzeichen kann viel ausmachen :aah

Erklaerung und ein entsprechender alternativer Programmvorschlag zu deiner Vorgehensweise ist in der von mir korrigierten Batchdatei enthalten, die ich dir zurueckgemailt habe.

Fuers erste mal ein ganz guter Versuch :repect

cu
:cool
m,-
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #29
T

timi

Dabei seit
05.04.2006
Beiträge
129
ZITAT Hab' das fuer dich angepasst. Der Tip von Timi war schon ganz richtig. Nur muss ausser TOKENS auch DELIMS an das Format von win 2000 angeglichen werden.

Code:
 TOKENS=2,3,4 und DELIMS=.-/ "statt 
 TOKENS=1,2,3 und DELIMS=.-/" dann siehst du den Unterschied :)

Ein kleines Leerzeichen kann viel ausmachen :aah
[/b]
Ich bin schon ganz gut. Ich war ganz dicht dran. :D :aah :blush :sing

gruss timi
:-)
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #30
L

linuxfreak

Gast
Super - mal schauen ob ich den Artikel in den IT-Teil unserer Schülerzeitung kopiere. Selbstverständlich mit Link auf Winboard :D.
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #31
G

Gast22829

Gast
Hi Mial,


also herzlichen Dank :danke

Eine super sache, hab ich mir sofort ausgedruckt, bzw.gespeichert


Danke!!!

Diego
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #32
W

wormmuk

Dabei seit
29.04.2006
Beiträge
2
Fehlermeldung ungültige Zahl! ?

Hallo,

ich habe die batchprogrammierung von Mial wie folgt übernommen, um aus dem Tagesdatum einen Pfadnamen für eine tägliche Sicherung aufzubauen:

Code:
REM  Als Trennzeichen kommen Punkt Bindestrich und Schraegstrich in Frage. 
REM    Sie sind in allen Win Versionen bei der Eingabe als Trennzeichen gueltig.
REM   Beim Format dagegen muss bei Ein- und Ausgabe lokal unterschieden werden.

SET dform=0
FOR %%a IN (jahr monat tag) DO SET %%a=
REM  aktuelles Datum
REM   !!  tag monat jahr  sind nur Platzhalter fuer die Werte von %%a %%b und %%c !
REM   Sie repraesentieren in diesem Abschnitt nicht zwingend TAG, MONAT und JAHR !!
FOR /F "TOKENS=1,2,3 DELIMS=.-/ " %%a IN ("%DATE%") DO (
	SET /A tag=%%a
	SET /A monat=%%b
	SET /A jahr=%%c
	)

Hat auch bis zum Anfang des Monats gut funktioniert. Nun erhalte ich folgende Fehlermeldung zweimal(!):

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), hexadezimale (0x11) oder oktale Zahlen (021)
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), hexadezimale (0x11) oder oktale Zahlen (021)


Scheinbar kommt das Batch mit dem Wert 08 und dem Wert 09 nicht klar.

Was kann ich tun, um aus dem Tagsdatum einen Dateipfad zu generieren, der jeden Tag funktioniert?

Vielen Dank für Eure Hilfe.
WORMMUK
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #33
D

driftinggreywolf

Dabei seit
08.02.2008
Beiträge
19
hallo mial,
ich bin begeistert von deiner arbeit! für mich als "greenhorn" in diesem bereich mehr als beeindruckend! woher hast du deine grundlagen? kannst du mir einen tipp bezüglich literatur oder zusätzlicher infos (bespiele und/oder erklärungen der befehle, übersicht über befehle, ...) geben? mich hat dein thread mehr als neugierig gemacht.
vielen dank im voraus
driftinggreywolf
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #35
S

Simi1989

Dabei seit
26.11.2006
Beiträge
2.327
Ort
NRW
MhM, ist Thread ausgraben hier nicht verboten?
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #36
S

sheena

Dabei seit
01.09.2008
Beiträge
1
@wormuk

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), hexadezimale (0x11) oder oktale Zahlen (021)
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), hexadezimale (0x11) oder oktale Zahlen (021)

Scheinbar kommt das Batch mit dem Wert 08 und dem Wert 09 nicht klar.

Antwort:
stimmt. Win XP und 2k erkennen die Werte 08 und 09 als vermeintliches Oktalformat, was natuerlich inkorrekte Werte ergibt. Da ist wohl ein kopierfehler oder sowas im Prog eingeschlichen.

die Passagen im Prog muessen im Original korrekt lauten:

Code:
REM  -----------------------

REM  Ermittle das Datumsformat der gegenwaertigen Win Version
REM    Das Datum kann in Win in drei verschiedenen Formaten 
REM      vorliegen, abhaengig von der lokalen Win Version.

REM   dform=1 - Ursprung ist  TT MM JJJJ - Tag Monat Jahr  (z.B. deutsche und UK engl. Vers.)
REM   dform=2 - Ursprung ist  MM TT JJJJ - Monat Tag Jahr  (z.B. US engl. Vers.)
REM   dform=3 - Ursprung ist  JJJJ MM TT - Jahr Monat Tag  (z.B. ungarische Vers.)

REM  Als Trennzeichen kommen Punkt Bindestrich und Schraegstrich in Frage. 
REM    Sie sind in allen Win Versionen bei der Eingabe als Trennzeichen gueltig.
REM   Beim Format dagegen muss bei Ein- und Ausgabe lokal unterschieden werden.

SET dform=0
FOR %%a IN (jahr monat tag) DO SET %%a=
REM  aktuelles Datum
REM   !!  tag monat jahr  sind nur Platzhalter fuer die Werte von %%a %%b und %%c !
REM   Sie repraesentieren in diesem Abschnitt nicht zwingend TAG, MONAT und JAHR !!
FOR /F "TOKENS=1,2,3 DELIMS=.-/" %%a IN ("%DATE%") DO (
	SET  tag=%%a
	SET  monat=%%b
	SET /A jahr=%%c
	)
  IF [08]==[%tag%] SET /A tag=8
  IF [09]==[%tag%] SET /A tag=9
  IF [08]==[%monat%] SET /A monat=8
  IF [09]==[%monat%] SET /A monat=9

  IF %monat% GTR 12 SET dform=2
  IF   %tag% GTR 12 SET dform=1
  IF   %tag% GTR 31 SET dform=3
IF   %dform% GTR 0 GOTO parameter
  SET /A tag+=12
  ECHO. | DATE %tag%-%monat%-%jahr%
FOR /F "TOKENS=1 DELIMS=.-/" %%a IN ("%DATE%") DO SET  tag=%%a
  IF [08]==[%tag%] SET /A tag=8
  IF [09]==[%tag%] SET /A tag=9

  IF   %tag% GTR 12 SET dform=1
  IF %dform%==1 SET /A tag-=12
  IF %dform%==0 SET /A monat+=12
  ECHO. | DATE %tag%-%monat%-%jahr%
IF   %dform%==1 GOTO parameter
FOR /F "TOKENS=2 DELIMS=.-/" %%a IN ("%DATE%") DO SET  monat=%%a
  IF [08]==[%monat%] SET /A monat=8
  IF [09]==[%monat%] SET /A monat=9

  IF %monat% GTR 12 SET dform=2
  IF %dform%==2 SET /A monat-=12
  ECHO. | DATE %tag%-%monat%-%jahr%
IF   %dform%==2 GOTO parameter

GOTO date_error
REM  Schwerer Fehler! - Kann Systemdatum nicht ermitteln.
REM    Sollte bei Win Versionen mit westlichem Zeichensatz ausgeschlossen sein.

REM  -----------------------

und

Code:
REM :akt_Datum

:datum_1
FOR /F "TOKENS=1,2,3 DELIMS=.-/" %%a IN ("%DATE%") DO (
	SET  tag=%%a
	SET  monat=%%b
	SET /A jahr=%%c
	)
  IF [08]==[%tag%] SET /A tag=8
  IF [09]==[%tag%] SET /A tag=9
  IF [08]==[%monat%] SET /A monat=8
  IF [09]==[%monat%] SET /A monat=9
GOTO :EOF

:datum_2
FOR /F "TOKENS=1,2,3 DELIMS=.-/" %%a IN ("%DATE%") DO (
	SET  tag=%%b
	SET  monat=%%a
	SET /A jahr=%%c
	)
  IF [08]==[%tag%] SET /A tag=8
  IF [09]==[%tag%] SET /A tag=9
  IF [08]==[%monat%] SET /A monat=8
  IF [09]==[%monat%] SET /A monat=9
GOTO :EOF

:datum_3
FOR /F "TOKENS=1,2,3 DELIMS=.-/" %%a IN ("%DATE%") DO (
	SET  tag=%%c
	SET  monat=%%b
	SET /A jahr=%%a
	)
  IF [08]==[%tag%] SET /A tag=8
  IF [09]==[%tag%] SET /A tag=9
  IF [08]==[%monat%] SET /A monat=8
  IF [09]==[%monat%] SET /A monat=9
GOTO :EOF

REM :end_akt_Datum

entschuldigung.

gruss sheena
 
  • Wie man/frau ein (Batch-)Programm schreibt Beitrag #37
T

thomas82

Gast
Hallo Tolle Tipps!
Aber kann man so was wie das Datum auch mit der Zeit machen.

Was ich machen will ist das sich ein Ordner erstellt der so aus sehen soll
2010-04-16_22-16.
Ich würde das für ein Backuptool nutzen.
 
Thema:

Wie man/frau ein (Batch-)Programm schreibt

Wie man/frau ein (Batch-)Programm schreibt - Ähnliche Themen

Probleme bei Leerzeichen im Pfad: dSource muss ein Pfad mit einem Abstand sein -> G:\Meine Ablage\git-backup Geht nicht: @echo on setlocal ENABLEDELAYEDEXPANSION set...
Einzelnen Ordner verschieben per Batch-Datei: Hallo, ich habe eine Frage zu den verschieben von Ordnern mithilfe einer Batch-Datei. Sprich ich will z.B., dass in einem Ordner, wo mehrere...
Was ist FUB.bat und FUB_Send.bat: Hallo Community, bei mir blitzt immer wieder unter Windows 10 64 Bit ein Command Window auf, das aber so schnell verschwindet, dass man es nicht...
Batch Programmierung: Guten Nabend miteinander. Also ich darf für meinen Chef ein kleines Programm schreiben welches Die Namen aus einer Textdatei ausliest und danach...
Permanent auftretenden Mikroruckler -betrifft alle Anwendungen- Windows10/Spieleanwendungen: Hallo Liebe Community, seit einiger Zeit beschäftigen mich Mikroruckler und Lags im meinem System. Erst vielen mir die Lags beim zocken auf...
Sucheingaben

hexadezimal fehler datum batch

Oben