hipfzwirgel
Goto Top

Batch Variable erzeugen mit Leerzeichen und Klammern

Hallo an Alle,

ich habe eine lösbare Aufgabe und finde die richtige Schreibweise nicht. Ich muss eine Variable in einem Batchscript erzeugen mit folgendem Inhalt:

"Beispieltext (800)" also in etwa so:

Set var = "Beispieltext (800)"   

In der Variable, die als Parameter an ein Proggi übergeben werden soll, muss genau der Wortlaut drinstehen,
wie oben angeführt, also mit allen Anführungszeichen, Leerzeichen und Klammern.

Kann mir jemand sagen wie ich die ganzen Sonderzeichen in die Variable rein bekomme? Sämtliche meiner Maskierungsversuche schlugen bis jetzt fehl.
face-sad

Content-Key: 350854

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

Printed on: April 25, 2024 at 12:04 o'clock

Member: MrCount
MrCount Oct 05, 2017 updated at 09:15:22 (UTC)
Goto Top
Servus,

schon mal
Set "var=^"Beispieltext (800)^""   
probiert? face-wink
Member: hipfzwirgel
hipfzwirgel Oct 05, 2017 at 09:17:44 (UTC)
Goto Top
Hallo MrCount,

ich habe dein Vorschlag probiert. Skript bricht direkt ab. >>heuel, schluchz, gezeter...<<
Member: Pjordorf
Pjordorf Oct 05, 2017 updated at 09:34:19 (UTC)
Goto Top
Hallo,

Zitat von @hipfzwirgel:
Set var = "Beispieltext (800)"   
Dann schau doch mal was in deiner Variabel var nun drin steht. Ein Set reicht dazu. Dazu solltest du folgende Ausgabe bekommen var = "Beispieltext (800)". Und was liefert dir ein var1="Beispieltext (800)" oder ein "var2=Beispieltext (800)" oder gar ein "var3=^"Beispieltext (800)^""? Vermutlich ist nicht das setzen der Variabel dein Problem sondern die weiterverarbeitung oder deren Ausgabe.

Sämtliche meiner Maskierungsversuche schlugen bis jetzt fehl.
Hast du dazu Beispiele welche fehlschlugen?

Das setzen einer Variabel ist das eine, das auswerten bzw. weiterverarbeiten etwas ganz anderes. Wo also ist dein
>>heuel, schluchz, gezeter...<<
einzuordnen?

Gruß,
Peter
Member: hipfzwirgel
hipfzwirgel Oct 05, 2017 at 10:06:10 (UTC)
Goto Top
Hallo Peter,

Der Inhalt soll einfach als Parameter ein eine Exe weitergegeben werden. Zunächst habe ich es als Makro in Excel geschrieben.
Das Makro las die Werte zweier Zellen aus, nahm die o.g. Variable und übergab sie an die exe. Alles gut.
Leider funzen im Büro Makros nicht(Policy). Also dachte ich, ich lese die Werte per Batch aus, hänge die o.a. variable mit dran und übergebe sie an die exe. So in etwa:

set Art = "Beispieltext (800)"  

echo %Art%

FOR /f "tokens=1-2" %%A IN (liste.txt) DO (  

start /wait "" "Text.exe" %%A %%B %Art%  
Pause
 
)

exit

Weder die Ausgabe via Echo noch die Übergabe liefern die richtigen Werte. face-smile
Member: MrCount
Solution MrCount Oct 05, 2017 at 10:13:25 (UTC)
Goto Top
Also, wenn ich das so mache
Set "var=^"Beispieltext (800)^""   
echo %var%
pause
dann wird mir folgendes ausgegeben:
"Beispieltext (800)"  


In der Variable var steht also der korrekte Wert.
Member: Biber
Biber Oct 05, 2017 at 10:15:04 (UTC)
Goto Top
Moin hupfzwirgel,

liegt bestimmt auch daran, das du gar keine Variable %art% defifiert hast, sondern eine Variable %art %.

Mit "Set var=xyz" definierst du eine Variable %var%; mit "Set var = xyz" eine Variable namens%var %.

Fang also da an mit Nachbessern.

Grüße
Biber
Member: hipfzwirgel
hipfzwirgel Oct 05, 2017 updated at 10:43:46 (UTC)
Goto Top
Hallo Biber,

danke für deinen Tipp. habe jetzt die Variable so definiert:
set "Art=Beispieltext (800)"  

Ausgabe Echo: Beispieltext (800) rem es fehlen die Anführungszeichen face-sad

Parameterübergabe: Beispieltext rem hier fehlt noch mehr face-sad

hast du mir noch einen Tipp?


Hallo MrCount,

wenn ich deine Zeile in die o.a. Batch einfüge schließt sich bei mir die Batch ohne jede Reaktion. Also keine Ausgabe des Echo und auch keine Übergabe...

Berichtigung: Nach einfügen von pause nach Echo bekomme ich die gleiche Ausgabe. Insofern sind wir einen Schritt weiter. Danke dafür.
Also bricht die Batch innerhalb der For-Schleife ab. Warum nur?
Member: Pjordorf
Pjordorf Oct 05, 2017 updated at 10:49:26 (UTC)
Goto Top
Hallo,

Zitat von @hipfzwirgel:
Weder die Ausgabe via Echo noch die Übergabe liefern die richtigen Werte. face-smile
Hast du die Güte uns deine Ausgaben auch mitzuteilen, und zwar so wie diré bei dir ausgegeben werden, inkl. Leerzeichen und allem? Nicht richtige Werte kann von " " bis "Guggelhupf" alles bedeuten. Und nur weil du ein Zeichen nicht siehst, ist es immer noch ein gültiges Zeichen aus deinen verwendeten Zeichensatz, z.B. das Leerzeichen. Das ist kein Nichts. Am besten die Ausgaben von dir hier in Code Tags gesetzt, dann bleiben auch Sonderzeichen erhalten face-smile
Was ergibt ein
@Echo off

Set Art = "Beispieltext (800)"  
Set Art="Nur anders"  
Set "Art=Noch anders"  
Set Art1 = "Hier nur Quatsch"  

Echo .
Echo und nun die Pruefung
echo %Art%
echo %Art %

Echo.
Echo Und nun das Set Kommando
set art

Pause

Gruß,
Peter
Member: hipfzwirgel
hipfzwirgel Oct 05, 2017 at 11:01:43 (UTC)
Goto Top
So jetzt habe ich es dank des Tipps von MrCount gelöst:

@echo off &setlocal DisableDelayedExpansion

set "Art=^"Beispieltext (800)^""  

setlocal EnableDelayedExpansion
FOR /f "tokens=1-2" %%A IN (liste.txt) DO (  

start /wait "" cmd.bat %%A %%B !Art!  
pause
 
)

exit



Im VBA-Makro reicht da so wenig Code:

Art = """Beispieltext (800)"""  
Shell (Pfad & " " & Azelle & " " & Bzelle & " " & Art)  


Danke an Biber und MrCount für eure Hilfe....
Member: MrCount
MrCount Oct 05, 2017 updated at 13:04:49 (UTC)
Goto Top
@hipfzwirgel

Sehr gut!

Dann bitte noch How can I mark a post as solved? beachten face-wink
Zusätzlich sollte der Fragesteller die Antworten welche zur Lösungsfindung beigetragen haben, durch einen Klick auf "Zur Lösung beigetragen" neben der jeweiligen Antwort, markieren. Dies hilft Besuchern die Lösung für die Frage schneller aufzufinden.

Danke
Member: rubberman
rubberman Oct 05, 2017 updated at 21:51:24 (UTC)
Goto Top
Zitat von @MrCount:

Servus,

schon mal
Set "var=^"Beispieltext (800)^""   
probiert? face-wink

Das erzeugt nicht den Variableninhalt den du glaubst.
@echo off &setlocal
:: falsch
set "test=^"123 (456)^""  
echo scheinbar:
echo %test%
echo tatsaechlich:
set test

echo ~~~~~~~~~~~~
:: unkritisch
set test="123 (456)"  
set test

echo ~~~~~~~~~~~~
:: kritisch
set "test="123 (456)""  
set test

echo ~~~~~~~~~~~~
:: unkritisch
set ^"test="123 (456)"^"  
set test

pause
Grüße
rubberman