BATCH Anführungszeichen entfernen klappt nur halb?

specialsymbol

Ensign
Registriert
Apr. 2004
Beiträge
136
Hallo!

Ich habe eine Frage: Ich würde gerne eine Batch schreiben, die folgendes tut:

  • Zwei Sorten Dateinamen auflisten (unterschieden durch einen vorangestellten Buchstaben)
  • Jeweils ein Prefix vor jeden Dateinamen setzen mit Sonderzeichen
  • Jeweils ein Postfix hinter jeden Dateinamen setzen mit Sonderzeichen
  • Jeweils die beiden bis auf den vorangestellten Buchstaben identischen Dateinamen inklusive Pre- und Postfix in eine Zeile einer Datei schreiben, getrennt durch ein Semikolon
  • Das ganze für die komplette Liste erledigen

Um das mit einem konkreten Beispiel zu verdeutlichen:

Ich habe lauter Bilder, in Farbe (FBaum und Schaukel.jpg, FHaus.jpg, FGartenzäune.jpg, FTeich.jpg) und Schwarzweiß (GBaum und Schaukel.jpg, GHaus.jpg, GGartenzäune.jpg, GTeich.jpg).
Diese sollen von einem HTML-Tag eingerahmt werden, damit sie als Bild erkannt werden, und jeweils nebeneinander stehen:
Code:
<img ig="GBaum und Schaukel.jpg">;<img ig="FBaum und Schaukel.jpg">
<img ig="GHaus.jpg">;<img ig="FHaus.jpg">
<img ig="GGartenzäune.jpg">;<img ig="FGartenzäune.jpg">
<img ig="GTeich.jpg">;<img ig="FTeich.jpg">

Weiß jemand wie ich das hinkriege?
Ich scheitere momentan die Anführungszeichen zu entfernen. Bzw. es klappt für set, aber ich bekomme es nicht in irgendeine Ausgabe:

Code:
@ECHO OFF
setlocal enableDelayedExpansion

set prefix="<img ig="


for /f "delims=" %%A in ("!prefix!") do endlocal & set "prefix=%%~A"

set prefix

prefix scheint tatsächlich
Code:
<img ig=
zu sein, wenn ich es allerdings mit echo ausgeben möchte kommt nur eine fehlermeldung:
PHP:
echo %prefix%

Kann mir da jemand weiterhelfen?
 
Ich vermute, dass es an dem Zeichen "<" (Redirect input) liegt.
Da solltest Du Dir etwas anderes einfallen lassen, indem Du Dir vielleicht in einem zweiten Schritt mit Suchen und Ersetzen doch das uU benötigte "<" einbaust.
 
Code:
echo %prefix:<=^<%
// oder
echo "%prefix%"
Mit ^ wird escaped.
 
Danke, Yuuri! Das bringt mich weiter :)


Also, das hier klappt soweit schon mal:

@ECHO OFF
setlocal enableDelayedExpansion

set prefix="^<img^ src^=^""


for /f "delims=" %%A in ("!prefix!") do endlocal & set "prefix=%%~A"

echo %prefix%"

Allerdings klappt es nicht das auf ein Postfix zu erweitern:
@ECHO OFF
setlocal enableDelayedExpansion

set prefix="^<img^ src^=^""
set postfix="^"^>"

for /f "delims=" %%A in ("!prefix!") do endlocal & set "prefix=%%~A"
for /f "delims=" %%B in ("!postfix!") do endlocal & set "postfix=%%~B"

echo %prefix%
echo %postfix%

... ich vermute, ich darf nicht in der ersten forschleife das endlocal aufrufen?

OK, neuer Ansatz:

Man braucht die Schleife gar nicht! Ich kriege das auch ohne hin, dank Escape ^.


Nur noch eine Sache hängt jetzt:
kriege ich irgendwie das erste zeichen von einer Variablen entfernt?

@ECHO OFF

for %%i in (F*.jpg) DO echo ^<img^ ig^=^"%%i^"^>;^<img^ ig^=^"%%i^"^>

Macht fast genau das was es soll, mit einem kleinen Haken:

Sowohl die vordere wie auch die hintere Ausgabe verweist auf das gleiche (Farb-)Bild (da es mit F anfängt). Kann ich irgendwie das F entfernen? Das würde genügen, da ich dann in der Ausgabe F und G manuell einfügen kann, der Rest der Dateinamen stimmt ja immer überein...
 
Zuletzt bearbeitet:
Zurück
Oben