juergenl
Goto Top

Verzeichnisnamen mit Ausrufezeichen als Variable deklarieren

Ausrufezeichen "maskieren"

Hallo in die Runde!

Bitte um Nachsicht, wenn ich für einen Ladenhüter um Hilfe bitte: Ich mühe mich zur Zeit vergeblich ab, unter WIN XP Pro den Verzeichnisnamen "C:\Programme\Fritz!Box Monitor" als CMD-Variable zu deklarieren: Vor allem das Ausrufezeichen erscheint dabei nicht. (Könnte ein Ratgeber bitte gleich auch nochmal einen Satz in Bezug auf das Leerzeichen spendieren ?)

Ich betreibe ferner einen Editor, welcher Backup-Dateien mit der Endung "BK!" erzeugt. Auch diese Files würde ich gerne in Variablenform beschreiben, um sie gemeinsam mit anderen Backup- und Temp-Files per Batch zu entsorgen.

Wo kann ich solche und andere GRUNDREGELN wohl nachlesen ? ( ... was gehört z.B. in Klammern, in Anführungszeichen, in Hochkommata pp)

Danke im Voraus für jede Hilfe und

Grüße aus Essen

Jürgen

Content-Key: 58645

Url: https://administrator.de/contentid/58645

Printed on: April 24, 2024 at 16:04 o'clock

Member: miniversum
miniversum May 10, 2007 at 06:08:33 (UTC)
Goto Top
Den Verzeichnisnamen kannst du ganz einfach wie alles andere auch in einer Variabeln hinterlegen.
Hier ein Beispiel:
@echo off
set variablenname="C:\Programme\Fritz!Box Monitor"
echo [%variablenname%]
set "variablenname=C:\Programme\Fritz!Box Monitor"
echo [%variablenname%]

Die " sollte man immer benutzen wenn Leerzeichen in Datei- oder Verzeichnisnamen vorkommen. Es schadet aber nicht sie Grundsätzlich bei Datei- und Verzeichnisnamen zu benutzen.
Als Beispiel:
echo Dies ist irgent ein Text>"eine beliebeige Datei.txt"

Nachlesen kan man das alles in der Verschiedenen Postings hier bei Batch und Shell und in den Tutorials und Links unten.

miniversum
Member: Juergenl
Juergenl May 10, 2007 at 07:14:50 (UTC)
Goto Top
Hallo miniversum,

danke für Deine schnelle Antwort:

Den Verzeichnisnamen kannst du ganz einfach
wie alles andere auch in einer Variabeln
hinterlegen.
Hier ein Beispiel:
> @echo off
> set
variablenname="C:\Programme\Fritz!Box Monitor"
> echo [%variablenname%]
> set
"variablenname=C:\Programme\Fritz!Box Monitor"
> echo [%variablenname%]

Die " sollte man immer benutzen ....

Ich habe das eben auf die Schnelle in Form des Batch-Schnipsels in beiden Varianten (%variabl0% und %variabl1%)versucht , leider aber nicht mit dem gewünschten Erfolg:

@echo OFF & SetLocal EnableDelayedExpansion & CLS
:: ----------------------------------------------------------
set variabl0="C:\Programme\Fritz!Box Monitor"
echo [%variabl0%] >> xtest.txt
set "variabl1=C:\Programme\Fritz!Box Monitor"
echo [%variabl1%] >> xtest.txt
goto :eof

:: Ausgabe: ====
["C:\Programme\FritzBox Monitor"]
[C:\Programme\FritzBox Monitor]
:: ===========

Für beide Varianten zeigt 'echo' den Inhalt leider OHNE das Ausrufezeichen, während das Blank richtig erfaßßt wird ... - sorry mache ich da etwas verkehrt ?

Nachlesen kan man das alles in der Verschiedenen Postings hier bei Batch und
Shell ....

Den einschlägigen Stoff hier im Forum habe ich natürlich schon rauf und runter durchgenommen. In diesem Fall aber leider ohne den rechten Erfolg. Also auf ein Neues!

Beste Grüße

Jürgen


PS: Ich melde mich noch einmal, nachdem ich zur Sicherheit mal das 'EnableDelayedExpansion' auskommentiert habe, und siehe da:


@echo OFF
:: & SetLocal EnableDelayedExpansion & CLS
:: ----------------------------------------------------------
type xtest.bat > xtest.txt
echo. >> xtest.txt
echo ========== >> xtest.txt
set variabl0="C:\Programme\Fritz!Box Monitor"
echo [%variabl0%] >> xtest.txt
set "variabl1=C:\Programme\Fritz!Box Monitor"
echo [%variabl1%] >> xtest.txt
echo =========== >> xtest.txt
echo. >> xtest.txt

:: ===Ausgabe: =======
["C:\Programme\Fritz!Box Monitor"]
[C:\Programme\Fritz!Box Monitor]
:: ===========

In diesem Fall kommt also das heraus, was ich wollte. Danke noch einmal!

Welchen Zusammenhang dies allerdings mit 'DelayedExpansion' haben mag ... darüber grübelt jetzt heftig

mit freundlichen Grüße

Jürgen
Member: Biber
Biber May 10, 2007 at 10:52:40 (UTC)
Goto Top
Moin Juergenl,

die CMD.exe hat an dieser Stelle (Verwendung von Ausrufungszeichen bei DelayedExpansion) in der Tat ein Problem.
Einen nicht dokumentierten Bug, wäre richtiger.
Andere würden jetzt auch schreiben: Ist halt Shice programmiert und zu wenig getestet worden. Verkneif ich mir aber.

Wenn ein "Setlocal EnableDelayedExpansion" aktiv ist, dann ist es unmöglich,
  • innerhalb von Variablennamen Ausrufungszeichen zu verwenden
  • auch nur ein banales "echo Hallo Welt!" auszuführen ("Hallo Welt" ist das Ergebnis)

Das Ausrufungszeichen lässt sich auch nicht als Literal/als Sonderzeichen maskieren.
Zumindest kenne ich weder einen Workaround noch eine offizielle M$-Einstufung als Bug.

Also die Delayed Expansion nicht pauschal aktivieren.

Gruss
Biber
Member: Juergenl
Juergenl May 10, 2007 at 16:38:16 (UTC)
Goto Top
Hej Biber,

Dank für diesen Hinweis !

die CMD.exe hat an dieser Stelle (Verwendung
von Ausrufungszeichen bei DelayedExpansion)
in der Tat ein Problem.
Einen nicht dokumentierten Bug, wäre
richtiger.

"THAT's NOT A BUG, IT's A (NEW) FEATURE!"

Wenn ein "Setlocal
EnableDelayedExpansion" aktiv ist, dann
ist es unmöglich,
  • innerhalb von Variablennamen
Ausrufungszeichen zu verwenden

Das Ausrufungszeichen lässt sich auch
nicht als Literal/als Sonderzeichen
maskieren.

... aber wie sollte DA jemals ein Mensch drauf kommen ? Die Erfinderin hat für solche Eigenheiten natürlich 'Gute Gründe', - streng geheim natürlich!

Also die Delayed Expansion nicht pauschal
aktivieren.

Auch aus dieser Sicht bestimmt ratsam!

Nochmals besten Dank beiderseits und Grüße aus Essen

Jürgen