Maskierung von Zeichen in DOS

  • #1
C

Chris 08/15

Guest
Hi!

Angenommen, ich moechte in DOS eine Textzeile in eine Datei schreiben:
Code:
echo Diese Zeile schreibe ich in eine Datei! > test.txt
Das klappt, kein Ding....d.h. Inhalt der Datei test.txt = Diese Zeile schreibe ich in eine Datei!
Wenn ich bestimmte Zeichen wie z.B. & oder ( verwenden will, muss ich den String in Anfuehrungsstriche setzen:
Code:
echo Diese Zeile (schreibe) ich in eine & Datei! > text.txt
Dann is allerdings text.txt = Diese Zeile (schreibe) ich in eine & Datei!
D.h. die Anfuehrungsstriche werden mit in die Datei uebernommen.
Jetzt die eigentlichen Fragen:

1) wie kriege ich Zeichen wie & oder ( in den Text ohne dass der String dann in der Datei in gesetzt wird?

2) wie kriege ich Stings rein, die selbst Anfuehrungsstriche enthalten?

3) Evtl kann man dem DOS-Interpreter irgendwie sagen hoer mal, dat naechste Zeichen, dat interpretierste ma nich, dat gibste einfach ma so weiter!... gibts denn ne Maskierung in DOS?

4) Kann ich evtl sogar die HEX-Codes der ASCII und/oder OEM-Codepage verwenden?

Dank euch!

Chris
 
  • #2
So gehts: ;)

1 und 3)
Code:
echo Diese Zeile (schreibe) ich in eine ^& Datei! > text.txt

Folgende Zeichen sollten ein  ^ vorangestellt haben, damit sie im Text erscheinen:
&<>()@^|

2) Folgendes gilt bei der Verwendung von :
Logik zur Verarbeitung des doppelten
Anführungszeichens () gilt:

    1.  Sind alle folgenden Bedingungen erfüllt, wird ein doppeltes
        Anführungszeichen auf der Befehlszeile beibehalten:

        - keine Option /S
        - genau zwei doppelte Anführungszeichen
        - keines der folgenden Zeichen zwischen den doppelten
          Anführungszeichen: &<>()@^|
        - es ist mindestens ein Leerzeichen zwischen den doppelten
          Anführungszeichen
        - die Zeichenfolge zwischen den doppelten Anführungszeichen ist der
          Name einer ausführbaren Datei

    2.  Ist dies nicht der Fall, wird bei einem doppelten Anführungszeichen
        als erstem Zeichen sowohl dieses, als auch das letzte doppelte
        Anführungszeichen entfernt (und der Rest der Befehlszeile beibehalten).
Quelle: cmd.exe /?

4) Nein. Sowas kann cmd.exe bzw. command.exe nicht.

Es gibt aber anderen Ersatz, der mehr kann.
4DOS bzw 4NT
Info zu 4DOS

Oder du nimmst gleich eine von UN*X kommende Shell (Kommandozeile) wie bash oder zsh.

Vielleicht hilft es dir ja.
 
  • #3
Da habe ich auch ne Frage zu, die ich schon mal stellte:

Wie kann ich denn etwas in ein Textdokument schreiben, was
1.) einen Pfad hat, der in gesetzt werden muss und
2.) selber als batch funktionieren soll?

Bsp:
Ziel: BATCH2.BAT macht ein Textdokument BATCH3.txt

BATCH.TXT kann man beliebig in .bat umbenennen:
Programm: ECHO x>>Pfad.txt
CALL y>>Pfad.txt

BATCH2.BAT soll ein TExtdokument BATCH3.TXT erstellen,
dass den Quellcode hat:
ECHO x>>Pfad.txt
CALL y>>Pfad.txt

Meien Frage: wie bekomme ich das mit den >> hin, die ich ja wahrscheinlich
zweimal setzen muss?
Einmall, damit BATCH2.BAT dass in das Textdokument schreibt und einmal, damit
der Quellcode seinen Output im Pfad.txt speichert?
 
  • #4
>> Das ist der Pfad.txt

??? Soganz habe ich aber nicht verstanden, was du machen willst!?

Wärst du bitte so nett und würdest es bitte nochmals fü mich genauer erläutern?
 
  • #5
Ja, gerne.

ECHO OFF
CLS
ECHO ^ECHO Hallo ^>^>Pfad >>Text.txt
ECHO ^ECHO PAUSE ^>^>Pfad >>Text.txt
PAUSE
EXIT

Das Programm schreibt nen Quelltext, der batch fähig ist,
in den Pfad.

Habe ich das richtig verstanden, muss ich
^>^>Das ist der Pfad.txt
eingeben?

Also ich habe das mal ausprobiert:

Code:
ECHO OFF
CLS
ECHO ^@ECHO OFF^>^>EchoZuDateiTEST.txt >>EchoZuDateiBatch.txt
ECHO ECHO Hallo.^>^>EchoZuDateiTEST.txt >>EchoZuDateiBatch.txt
ECHO ECHO Datum: %date%^>^>EchoZuDateiTEST.txt >>EchoZuDateiBatch.txt
ECHO ECHO Uhrzeit: %time%^>^>EchoZuDateiTEST.txt >>EchoZuDateiBatch.txt
pause

Das ist so meine Datei, die da oben.

Dann kommt als Output in EchoZuDateiBatch.txt :

Code:
@ECHO OFF>>EchoZuDateiTEST.txt 
ECHO Hallo.>>EchoZuDateiTEST.txt 
ECHO Datum: Mo 02.01.2006>>EchoZuDateiTEST.txt 
ECHO Uhrzeit: 22:14:19,85>>EchoZuDateiTEST.txt

Das ist mein gesuchtes Problem gewesen.
Ich weiß aber wirklich nicht, was mir -ich zitiere dich, GwenDragon-
das bringen soll:
Code:
>> Das ist der Pfad.txt


Bei mir wird  als Beispiel jetzt der Pfad, der in gesetzt werden muss, weil
er Leerzeichen enthält, wirklich so kopiert nach dem obigen Beispiel.

Es reicht, wenn ich ^>^> eingebe; der Pfad Pfad mit Leerzeichen
ist auch in der .txt Pfad mit Leerzeichen , ohne dass ich Pfad mit Leerzeichen
hätte so eingeben müssen.


Das einzige, was ich jetzt mit 2* verbinde, ist der START aufruf:
START Titel Programmpfad

aber sonst  fällt mir nichts ein.
 
  • #6
Ich habe da noch eine Frage, die mir bis jetzt nicht so erklären konnte:

Ich habe zwei batch Dateien. Der Unterschied ist die Zeichensetzung
bei der Variablen:

die erste:
Code:
ECHO OFF
CLS
@set V1=HAUS
ECHO %V1%
ECHO.
@set V2=BRAND
ECHO %V2%
ECHO.
@set V1=%V2%
ECHO %V1%
pause
exit

Output zur ersten batch:
HAUS

BRAND
V1=HAUS
HAUS
Drücken Sie eine beliebige Taste . . .


die zweite
Code:
ECHO OFF
CLS
@set V1=HAUS
ECHO %V1%
ECHO.
@set V2=BRAND
ECHO %V2%
ECHO.
@set %V1%=%V2%
ECHO %V1%
pause
exit


Output zur zweiten batch:
HAUS

BRAND

Die Umgebungsvariable HAUS ist nicht definiert.
HAUS
Drücken Sie eine beliebige Taste . . .


Kann mir jemand irgendwas dazu sagen?
Was ist eine Umgebungsvariable?
 
  • #8
Moin!

Ich geh Deine Codes mal durch und schreib dahinter, was ich so denk...

Code:
ECHO OFF          // hoer ma auf, das was ich hier schreibe bei der Bearbeitung mit auszugeben
CLS               // machma den Bildschirm schwarz, bevor's weitergeht
@set V1=HAUS      // leg ma ne Variable mit dem Namen->V1' an und schreib da die 4 Buchstaben HAUS rein
ECHO %V1%      // Geb ma den Inhalt der Variablen->V1' auf dem Bildschirm aus...aber vorher und nacher noch  setzen!
ECHO.             // Machma ne neue Zeile
@set V2=BRAND     // leg ma ne Variable mit dem Namen->V2' an und schreib da die 5 Buchstaben BRAND rein
ECHO %V2%      // Geb ma den Inhalt der Variablen->V2' auf dem Bildschirm aus...aber vorher und nacher noch  setzen!
ECHO.            // Machma ne neue Zeile
@set V1=%V2%   // wat soll dat denn? Keine Ahnung...naja, dann zeig ich dem Kerl doch ma an, was in->V1' steht und ignorier den Rest
ECHO %V1%     // schon wieder->V1' ausgeben? na gut...aber wieder in 
pause            // *gääähn*
exit              // ...ich muss weg

Ich hoff dat war einigermaßen verstaendlich... Mit dem->set' machst Du ja nix anderes als wie z.B. mit->set path'...kennst Du das? Mach ma n DOS-Fenster auf und geb SET ein, dann siehst Du einige gesetzte Umgebungsvariablen, die das System an verschiedenen Stellen braucht. Du kannst auch einzelene Variablen rauspicken wie SET PATH, dann zeigt er Dir an, was alles in der Umgebungsvariablen PATH steht...
Wenn Du schreibst SET %V1% wundert er sich natuerlich, dass es keine Umgebungsvariable HAUS gibt...mach ma im DOS-Fenster SET HAUS, dann kriegste die gleiche Fehlermeldung wie in Deiner zweiten Datei...
Code:
@set %V1%=%V2%
so koenntest Du genauso schreiben
Code:
@set HAUS=%V2%
dann meckert er natuerlich, dass er->HAUS' nich kennt...er kennt ja nur->V1' und->V2'....
Mach ma die wech dann sollte dat gehen ;-) So'ne Umgebungsvariable is naemlich ganz schoen zickig, die mag keine :)

Ich hoff, ich konnt wenigstens n bissl Licht ins Dunkel bringen...

Greetz!

Chris
 
  • #9
Danke, trotzdem für deine Hilfe, aber wie ich das richtig eingeben sollte, das wusste ich schon.
Ich habe eben nur -weil es so spät war- versehentlich die SET variable1=Variable2
falsch eingetragen und dann kam das eben raus.

Trotzdem danke für deien erklärung, auch wenn ich nur wissen wollte, warum
der das so ausgibt.

Aber mich würde noch eins interessieren:

Wenn ich
Code:
ECHO @echo %Date%^>^>Pfad.txt >>TEST.txt
eingeben möchte in einer Batch, warum schreibt die batch in TEST.txt:
@echo Di 03.12.2006>>Pfad.txt
?
Wie geht es denn, dass in der TEST.txt steht:
Code:
@echo %Date%>>Pfad.txt
?
 
  • #10
-hAmMer- schrieb:
Aber mich würde noch eins interessieren:

Wenn ich
Code:
ECHO @echo %Date%^>^>Pfad.txt >>TEST.txt
eingeben möchte in einer Batch, warum schreibt die batch in TEST.txt:
@echo Di 03.12.2006>>Pfad.txt
?
Wie geht es denn, dass in der TEST.txt steht:
Code:
@echo %Date%>>Pfad.txt

In DATE steht das aktuelle Datum ;)
Wenn du %Date% schreibst, wird der Inhalt der Variablen von Daten ausgegeben.
Damit keine Verwechselungen mit Windowsinternen Variablen vorkommen, verwende doch solche in der Form MY_namerdervariablen.
Beispiel: MY_DATE anstatt DATE

Wenn du das % mit in die Textdatei geben willst, musst du es mit ^ maskieren, also ^% schreiben.
Code:
ECHO @echo ^%Date^%^>^>Pfad.txt >>TEST.txt
 
  • #12
danke, das ist ja super.
finde ich auf den links auch was zu My_Date ?

erstmal werde ich die lesen  ;)

nur der ECHO @echo %%Date%%^>^>Pfad.txt >>TEST.txt
macht's
 
  • #13
-hAmMer- schrieb:
danke, das ist ja super.
finde ich auf den links auch was zu My_Date ?
erstmal werde ich die lesen ;)
Bitte sehr. Schau dir das mal in Ruhe an, ich hoffe du kannst auch ein bisschen Englisch.
Lern ein bisschen, über, teste aus.

Falls ich mich mal länger nicht rühre: Ich muß auch mal wieder arbeiten. Habe nicht so viel Zeit gerade.
Typisch Freiberuflerin.
 
  • #14
Im anderen Therad hat mir jemand gepostet, wie man eine Shell erstellt, um damit Desktop anzeigen umzusetzen.

Allerdings will bei mir die Umsetzung nicht so recht klappen:

Code:
ECHO OFF
CLS
ECHO [Shell]>>C:\Pfad\Desktop anzeigen.txt
ECHO Command=2>>C:\Pfad\Desktop anzeigen.txt
ECHO IconFile=explorer.exe,3>>C:\Pfad\Desktop anzeigen.txt
ECHO [Taskbar]>>C:\Pfad\Desktop anzeigen.txt
ECHO Command=ToggleDesktop>>C:\Pfad\Desktop anzeigen.txt
PAUSE
@REN C:\Pfad\Desktop anzeigen.txt C:\Pfad\Desktop anzeigen.SCF
ECHO.
ECHO ON
ECHO Jetzt wird der Inhalt der C:\Pfad\Desktop anzeigen.txt angezeigt:
ECHO.
TYPE C:\Pfad\Desktop anzeigen.SCF

Die Ausgabe sieht so aus:
[Shell]
[Taskbar]
Command=ToggleDesktop

Nur wenn ich die = Zeichen und das Komma vor der 3 entferne,
dann gibt der mir auch den kompletten Quelltext aus.
 
  • #15
Moin!

Das mit den Sondezeichen steht doch oben! ;)
Maßgebend is das ^ vor Zeichen wie = oder auch , ...
Probiers ma so in der Art:

Code:
ECHO OFF
CLS
ECHO [Shell] > C:\Pfad\Desktop anzeigen.txt
ECHO Command^=2 >> C:\Pfad\Desktop anzeigen.txt
ECHO IconFile^=explorer.exe^,3 >> C:\Pfad\Desktop anzeigen.txt
ECHO [Taskbar] >> C:\Pfad\Desktop anzeigen.txt
ECHO Command^=ToggleDesktop >> C:\Pfad\Desktop anzeigen.txt
PAUSE
CD C:\Pfad
REN Desk*.txt Desk*.SCF
ECHO.
ECHO ON
ECHO Jetzt wird der Inhalt der C:\Pfad\Desktop anzeigen.txt angezeigt:
ECHO.
TYPE C:\Pfad\Desktop anzeigen.SCF
PAUSE

Viel Erfolg!

Chris
 
  • #16
Achso, was ich mich sowieso frage, warum schreibst Du den Kram eigentlich erst in eine TXT und nennst die dann um in SCF?
Schreib doch gleich alles in ne SCF...

Code:
ECHO OFF
CLS
ECHO [Shell] > C:\Pfad\Desktop anzeigen.scf
ECHO Command^=2 >> C:\Pfad\Desktop anzeigen.scf
ECHO IconFile^=explorer.exe^,3 >> C:\Pfad\Desktop anzeigen.scf
ECHO [Taskbar] >> C:\Pfad\Desktop anzeigen.scf
ECHO Command^=ToggleDesktop >> C:\Pfad\Desktop anzeigen.scf
ECHO.
ECHO ON
ECHO Jetzt wird der Inhalt der C:\Pfad\Desktop anzeigen.scf angezeigt:
ECHO.
TYPE C:\Pfad\Desktop anzeigen.scf
PAUSE

Dat rockt doch eher das Haus ;)

Greetz,

Chris
 
Thema:

Maskierung von Zeichen in DOS

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.489
Neuestes Mitglied
DonMartin
Oben