Batch-Programmierung: String Funktionen

Diskutiere Batch-Programmierung: String Funktionen im Programmierung Forum im Bereich Software Forum; Hallo Winboard, ich habe ein Problemchen: Ich habe eine Batch-Datei (change.bat). In dieser Datei habe ich Variablen, die Dateinamen (Strings)...
meikel

meikel

Threadstarter
Mitglied seit
26.11.2005
Beiträge
32
Hallo Winboard,

ich habe ein Problemchen: Ich habe eine Batch-Datei (change.bat). In dieser Datei habe ich Variablen, die Dateinamen (Strings) enthalten.
z.B. so
Code:
set file=testdatei.xml
Jetzt würde ich gerne Teile der Strings austauschen:
Z.B. soll aus "testdatei.xml" "testdatei.pdf" werden.

Welche Möglichkeiten bietet die Batchprogrammierung, um Teile eines Strings auszutauschen?
Bisher habe ich es so probiert:
Code:
set file=testdatei.xml
set newfile=%file:x=p%
Das funktioniert aber immer nur für ein einzelnes Zeichen (im obigen Beispiel wird jedes Vorkommen von x in der Variablen %file durch ein p ersetzt). Ich hätte diese Funktionalität aber sehr gerne für Zeichenketten, so dass ich z.B. 'xml' durch 'pdf' ersetzen kann.

Hat mir vielleicht jemand einen Tipp, wie ich Teile von Strings ersetzen kann?

Vielen Dank
M.
 
M

myoto

Gast
Ich denke bei sowas bist du mit AutoIt besser bedient


www.autoitscript.com


Batch Dateien sind ja eigentlich nicht so zum Programmieren geeignet, mit AutoIt sollte dein Problem schnell gelöst sein
 
S

SuperTux

Gast
Woher kommt eigentlich dieser Glaube, mit Batch könne man programmieren? Kennt keiner den WSH?
 
meikel

meikel

Threadstarter
Mitglied seit
26.11.2005
Beiträge
32
ZITAT(myoto @ 19.04.2006, 23:50) Quoted post
Ich denke bei sowas bist du mit AutoIt besser bedientwww.autoitscript.com
[/b]
Super. Damit hat alles geklappt was ich wollte. Danke!!!

ZITAT(SuperTux @ 20.04.2006, 05:07) Quoted post
Woher kommt eigentlich dieser Glaube, mit Batch könne man programmieren? Kennt keiner den WSH?
[/b]
Naja, wenns doch alle Grundfunktionen gibt, die eine Programmiersprache ausmachen (Bedingungen, Schleifen, Sprungmarken, ...) wieso sollte es dann nicht auch für grundlegende Dinge geeignet sein? Ich wollte ja nicht ein super komplexes Programm schreiben (dafür nehme ich Java oder C++) sondern schlicht einen Teil eines Strings tauschen.
Und da es mit einzelnen Zeichen problemlos klappt, habe ich gedacht, dass es für mehrere Zeichen auch nicht so komplex sein kann. Aber trotzdem danke für den sehr hilfreichen und weiterführenden Kommentar :-)

Und wenn dich der Ausdruch "Programmierung" stört, dann schau mal die Google Trefferliste zu dem Thema an. Ich find den gar nicht so abwegig: klick this

Grüße
M.
 
S

SuperTux

Gast
Du merkst doch: Batch ist nicht für grundlegende Dinge geeignet.
 
M

Mial

Mitglied seit
14.07.2004
Beiträge
2.132
Guten Morgen mein lieber SuperTux

beschwoerst du mich doch aus meinem 'Exil' aufs Board zurueck?

Tut mir in tiefster Seele fast leid, dir in diesem Punkt (Batch) mal wieder widersprechen zu muessen (*sic*), aber bei Batch(Programmierung) handelt es sich sehr wohl um eine Programmierung in einer Programmiersprache. Das beschraenkt sich naemlich nicht nur auf hoehere Programmiersprachen wie C oder Delphi, auf die du dich wohl im allgemeinen beziehst.

Vergleichbar ist Batch-Programmierung wohl am ehesten mit Programmierung in einer BASIC-Interpreter Sprache. Oder mit JAVA (nicht verwechseln mit Java-Script. Das ist wieder etwas anderes). Das Batchvokabular hat halt nur nicht ganz den Umfang seiner 'grossen' Verwandten.


Zu oben im Thread genannter Anfrage: ja, man kann auch Strings teilweise oder komplett in Batch ersetzen und veraendern.

In Ermangelung einer konkreten Anforderung des Fragestellers Meikel hier mal ein kurzer allgemeiner Abriss mit Democharakter in Form einer Batchdatei (am Postende auch angehaengt als Zip-File :deal ).

Code:
 @ECHO OFF
REMstrings.bat
REMzur Demo und zum Testen einzelner Routinen
REMby mial


REMNur zur 'optischen Markierung' der Stringlaenge :)
REM1 2
REM 1234567890123456789012
SET cnt= Na, woll'n mal seh'n 

@ECHO.
@ECHO -"01 2 3
@ECHO -"123456789012345678901234567890
@ECHO -" : : : : : : : : : : : : : : : 
@ECHO.
@ECHO0-"%cnt%"

SET target=%cnt:mal=nichts%
@ECHO.
@ECHOA-"%target%"

SET target=%target:~11,8%
REMvon vorne die naechsten 8 Zeichen NACH dem 11. Zeichen, also ab dem 12. Zeichen
@ECHO.
@ECHO1-"%target%"

SET target=%cnt:* mal= nichts%
REMalles ab dem ersten Antreffen von 'links' mit den entsprechenden Ersetzungen
@ECHO.
@ECHOB-"%target%"

SET target=%cnt:~11%
REMvon vorne alles NACH dem xx.ten Zeichen, also ALLES ab dem xx+1.ten Zeichen
@ECHO.
@ECHO2-"%target%"

SET target=%cnt:~-18%
REMnur die letzten xx Zeichen
@ECHO.
@ECHO3-"%target%"

SET target=%cnt:~0,-6%
REMvon vorne alles ab dem 0. Zeichen ausser bis auf die letzten 6 Zeichen
@ECHO.
@ECHO4-"%target%"

SET target=%cnt:~4,-6%
REMvon vorne alles ab dem 5. Zeichen ausser bis auf die letzten 6 Zeichen
REMalso vorne 4 weg, hinten 6 - also alles zwischen dem 4. von vorn und dem 6. von hinten
@ECHO.
@ECHO5-"%target%"


GOTO ende


gegenueber den M$-Angaben der dt. Win-Versionen korrigierte Zusammenfassung der String-Funktionen:

Das Ersetzen von Variablen wurde unter 2Kx/XP gegenueber 9x/NT folgendermaßen erweitert:

%BEISPIEL:str1=str2%

Dies erweitert die BEISPIEL-Variable, wobei jede Instanz von "str1" im
erweiterten Ergebnis mit "str2" ersetzt wird. "str2" kann die leere
Zeichenfolge sein, um alle Instanzen von "str1" aus der erweiterten Ausgabe zu
löschen. Wenn "str1" mit einem Sternchen beginnt, steht "str1" für alles
zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Auftreten des
übrigen Abschnitts von "str1".

%BEISPIEL:~10,5%

Dies erweitert die BEISPIEL-Variable und verwendet dann nur fünf
Zeichen ab dem elften Zeichen (Offset=10) des erweiterten Ergebnisses. 

Wenn die Länge nicht angegeben ist, wird der Rest des Variablenwerts verwendet.


Wenn eine der Zahlen (Offset oder Länge) negativ ist, dann wird der angegebene
Wert der Länge des Variablenwerts hinzugefügt.

%BEISPIEL:~-10%

extrahiert die letzten 10 Zeichen der Variable BEISPIEL.

%BEISPIEL:~0,-2%

extrahiert alle, außer den letzten 2, Zeichen der Variable BEISPIEL.


!! gezaehlt wird immer ab dem 0. Zeichen !! 
Das erste Zeichen im String hat also die Nummer 0, das Zweite die 1, das Dritte die 2 usw.

:ende
@ECHO.
[attachmentid=11367]

Batch-Programmierung ist eben doch und gerade auch fuer grundlegende Aufgaben sehr gut geeignet. Nix fuer ungut @ SuperTux

und viel Spass beim Programmieren @ Meikel u.a., die gern mal etwas 'tuefteln' :deal

cu
:cool
m,-
 

Anhänge

automatthias

automatthias

vernunftgeplagt
Mitglied seit
21.04.2006
Beiträge
8.053
... MS hat in den letzten Jahren deutlich dazu gelernt, und man kann mittlerweile mit den in CMD.EXE eingebauten Befehlen ganz schön viel machen (man lese nur einmal die Hilfe zum FOR.. Kommando.).

Wer dennoch MEHR haben möchte, dem kann ich nur uneingeschränkt 4NT empfehlen. Das ist eine Command-Shell als Ersatz von CMD.EXE mit sehr viel mehr Möglichkeiten.
Das Ganze ist Shareware, d.h. man kann es vorher einige Zeit ausprobieren. Ist leider nicht mehr so billig wie früher. Und damals gab es sogar einen deutschen Distributor...
(http://www.jpsoft.com)
 
S

SuperTux

Gast
Mial, kann man mit/in Batch auch eine grafische Oberfläche programmieren, wie das in QBasic möglich ist? Kan nman mit Batch Programme schreiben, die neue Funktionen zur verfügung stellen?

Batch ist keine Programmiersprache, Microsoft hat vielleicht versucht, daraus eine zu machen, was aber nicht geklappt hat. Natürlich hat man in Batch ein paar Möglichkeiten, die es auch in einer Programmiersprache gibt.

Und mit Basic kann man auch ausführbare Programme erstellen, also EXE-Dateien, ist also keine Interpretersprache wie Java-Script.
 
R

Ronny

SPONSOREN
Mitglied seit
07.08.2004
Beiträge
12.311
Standort
Rheinland
@SuperTux,

Du machst meiner Meinung nach den Fehler, dass Du den Begriff "Programm" unnötig kompliziert interpretierst!

Mal vorneweg: Ich hab' keinerlei Ahnung von (wirklicher) Programmierung. Aber ich erinnere mich aus meiner Anfangszeit mit dem Computer an eine Definition für den Begriff:

"Ein Programm ist eine Abfolge von sinnvollen Befehlen... usw.... usw....". Und das trifft nun auf eine Batchdatei tatsächlich auch zu. Wenn Du dich daran stören solltest, dass es bei einer Batch keine Kompilierung gibt... kein Problem, denn auch die gibt es, oder gab es zumindest mal. Ich erinnere mich auch an ein kleines Programm, dass aus einer Batchdatei eine ausführbare EXE machte. Wobei ich über Sinn oder Unsinn mich diesbezüglich nicht äußern möchte (oder kann).
 
S

SuperTux

Gast
Dann mal anders: eine Batch-Datei ist eine Stapel-Verarbeitungs-Datei. D.H. man kann ihn ihr andere Befehle/Programme aufrufen. Das wurde unter DOS in der Autoexec.bat eingesetzt, um beim Start automatisch Befehle auszuführen, wie z.B. den CD-ROM- oder Maus-Treiber zu laden, oder auch Treiber für die Soundkarte, es wurden Umgebungsvariablen gesetzt und die Tastatur angepasst. Um mehr Möglichkeiten zu haben, hat Microsoft Schleifen, Abfragen und noch ein paar Sachen eingebaut. Aber trotzdem ist es keine Programmiersprache, sondern eine Stapelverarbeitungsdatei.
 
Fireblade

Fireblade

Grüßt die Winboarder
Mitglied seit
10.12.2004
Beiträge
19.623
Schön dich endlich mal wieder nach langer Zeit zu lesen @Mial :blush
Dein Post ist wie immer sehr wertvoll. :danke

Gruß Fireblade :deal

uww.zur Arbeit
 
M

Mial

Mitglied seit
14.07.2004
Beiträge
2.132
Guten Morgen mein lieber SuperTux

als ich deine Argumentation gelesen habe, regte sich doch in mir, gelinde gesagt, der Widerspruch. Darum komme ich nicht umhin, dir hier zu antworten.

1. Eine Programmiersprache definiert sich nicht ueber einen maximalen Funktionsumfang, sondern ueber ihre Eignung zu einem bestimmten Verwendungszweck. Kein intelligenter Mensch wuerde z.B. mit Cobol ein Programm zur Darstellung chemischer Ablaeufe erstellen oder in Fortran ein Buchhaltungsprogramm schreiben oder mit Ada eine Vereinsdatenbank erstellen. Weshalb also sollte mit 'pure' Batch eine grafische Oberflaeche realisiert werden koennen? Eine brauchbare Menuefuehrung ist moeglich und sinnvoll und das ist auch machbar.

2. Batch ist keine Universalprogrammiersprache wie z.B. C, erhebt auch nicht diesen Anspruch und wurde nicht erschaffen, um grafische Benutzeroberflächen zu realisieren. Es wurde auch nicht von M$ erfunden oder entwickelt. Es ist auch viel aelter als das PARC (welches ja bekanntlich die grafische Oberflaeche entwickelt hat und selbst erst 1970 gegruendet wurde :aah ) und dient vornehmlich dazu, Ablaeufe am Rechner zu automatisieren und zu organisieren. Dem entspricht dann auch sein Funktionsumfang.

Seinen Ursprung hat es im Unix Shellscripting. Ich fuerchte, du verwechselst das begriffsmaessig mit der guten alten Lochkartenverarbeitung=Stapelverarbeitung=Batch(Stapel). Das ist aber nur eine Analogie bezueglich der Namensgebung.

3. Grundsaetzlich ist eine Programmiersprache eine formale Sprache zur Erstellung von Verarbeitungsanweisungen für Computer. Sie stellen Ausfuehrungsanweisungen in einer sowohl für den Rechner, als auch für den Menschen verständlichen Form dar. Dem entspricht die Script- und Batchprogrammierung (was rein formal gesehen das gleiche ist).

4. BASIC ist sehr wohl zuerst einmal eine Interpretersprache. Es wurde 1964 am Dartmouth College von zwei Studenten als kostenlose Ergaenzung, Einstieg oder Alternative (je nach Betrachtungsweise :-) ) zu den damals mehrere tausend Dollar teuren Programmiersprachen Algol und Fortran entwickelt. Basic-Compilerversionen folgten erst sehr viel spaeter etwa Mitte der achtziger Jahre, als die Anforderungen an die Geschwindigkeit der Verarbeitung auf Grund der aufkommenden grafischen Benutzeroberflaechen (Apple MacIntosh) stiegen.

5. Mit klassischem BASIC oder PASCAL eine "echte" grafische Oberflaeche schaffen zu wollen, ist schon wirklich ein vermessener Anspruch. :D Beide Sprachen wurden vor Entwicklung und Verbreitung der grafischen Bedienung fuer Computer entwickelt (Pascal 1968 als Weiterentwicklung von Algol als Compilersprache an der ETH Zuerich). Erst mit den 'modernen' Weiterentwicklungen der Sprachen ist es moeglich, wirkliche grafische Bedieneroberflaechen zu realisieren. Und: Seit Jahren gibt es fuer praktisch jede Interpreter-Programmiersprache auch externe Compiler. Das trifft auch auf Java und andere Scriptsprachen (Batch eingeschlossen) zu.

nix fuer ungut

cu
:cool
m,-
 
Thema:

Batch-Programmierung: String Funktionen

Sucheingaben

batch string in variable ersetzen

,

windows batch funktionen im String einbauen

,

batch programmierung länge einer variable ermittteln

,
"cmd Datei" Variable definieren

Batch-Programmierung: String Funktionen - Ähnliche Themen

  • Ich finde meinen Fehler

    Ich finde meinen Fehler: Bin grade bei der Entschlüsselung und immer kommt genau das gleiche bei Raus habt ihr nen Plan wo der Fehler ist FOR /F "skip=%skip%" %%A IN...
  • Batch Programmierung

    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...
  • GELÖST Batch-Programmierung: Prozess starten+warten

    GELÖST Batch-Programmierung: Prozess starten+warten: Ein Prozess soll gestartet werden, unmittelbar danach soll darauf gewartet werden, dass ein bereits bestehender, aebr anderer Prozess durch...
  • Batch Programmierung - Befehl in einer Variablen speichern

    Batch Programmierung - Befehl in einer Variablen speichern: Hallo zusammen, ich versuche gerade verzweifelt eine Batch zu schreiben, welche mir die Ausgabe eines Befehls in einer Variablen speichern soll...
  • GELÖST Schulaufgabe Batch-Programmierung HILFE!!!

    GELÖST Schulaufgabe Batch-Programmierung HILFE!!!: Hallo! Ich habe in der Schule die folgende Aufgaben bekommen: Aufgabe 1: Erstellen Sie eine BATCH-Datei, die folgendes leistet: Es ist ein...
  • Ähnliche Themen

    • Ich finde meinen Fehler

      Ich finde meinen Fehler: Bin grade bei der Entschlüsselung und immer kommt genau das gleiche bei Raus habt ihr nen Plan wo der Fehler ist FOR /F "skip=%skip%" %%A IN...
    • Batch Programmierung

      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...
    • GELÖST Batch-Programmierung: Prozess starten+warten

      GELÖST Batch-Programmierung: Prozess starten+warten: Ein Prozess soll gestartet werden, unmittelbar danach soll darauf gewartet werden, dass ein bereits bestehender, aebr anderer Prozess durch...
    • Batch Programmierung - Befehl in einer Variablen speichern

      Batch Programmierung - Befehl in einer Variablen speichern: Hallo zusammen, ich versuche gerade verzweifelt eine Batch zu schreiben, welche mir die Ausgabe eines Befehls in einer Variablen speichern soll...
    • GELÖST Schulaufgabe Batch-Programmierung HILFE!!!

      GELÖST Schulaufgabe Batch-Programmierung HILFE!!!: Hallo! Ich habe in der Schule die folgende Aufgaben bekommen: Aufgabe 1: Erstellen Sie eine BATCH-Datei, die folgendes leistet: Es ist ein...
    Oben