raidman
Goto Top

FOR Schleife mit DIR verliert Ausrufezeichen

Hallo Kenner und Könner,

leider hadere ich immer noch mit den Sonderzeichen in meiner BATCH
Jetzt ist es das " ! " das mir Kopfschmerzem macht, denn es verswindet einfach aus dem String

dir /b "!quella!"  
pause
FOR /f "delims=" %%a IN ('dir /b "!quella!"') DO (  
echo 101 %%a
pause
set "quelle=%~1%~2\%%a"  
)

die For Schleife gibt ein mit DIR ermittelten Dateinamen, der ein ! enthält schlich ohne aus
Also dir zeigt noch "na! sowas.txt"
echo 101 zeigt nur "na sowas.txt"

ein & an der Stelle wir durchgereicht

wie kann ich ereichen, das auch das ! durchgereicht wird?

Content-Key: 231510

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

Printed on: April 20, 2024 at 04:04 o'clock

Member: colinardo
colinardo Mar 03, 2014 at 14:02:56 (UTC)
Goto Top
dann musst du innerhalb deiner Schleife vor dem
echo ein
setlocal disabledelayedexpansion
setzen.
Exkurs zur verzögerten Variablenerweiterung:
Tutorial zur FOR-Schleife

Grüße Uwe
Member: RaidMan
RaidMan Mar 03, 2014 updated at 16:11:29 (UTC)
Goto Top
Hallo Uwe,

Danke für die Antwort, ich bin wohl zu blond für das Thema

scheinbar ist nur das eine " & " oder das andere " ! " Zeichen zulässig?

So wie ich deinen Vorschlag verstehe ist nur die eine oder andere Variante möglich.

Oder kann man den Code so gestalten, das ! und ? in einem String vorkommen dürfen
bzw eines von beiden Zeichen aber mit den selben Code abzuarbeiten sind ohne das es Probleme im Batch ablauf gibt??
Member: Biber
Biber Mar 03, 2014 at 16:26:47 (UTC)
Goto Top
Moin RaidMan,

ich habe da keine Schwierigkeiten bei enabled delayed expansion (Testfall 1 unten).

C:\Users\Biber>md "Na! hallo & bye"


C:\Users\Biber>for /f "delims=" %i in ('dir /b na*') do @echo Inhalt von i:[%i]
Inhalt von i:[Na! hallo & bye]

C:\Users\Biber>setlocal enabledelayedexpansion & for /f "delims=" %i in ('dir /b na*') do @(set "yy=%i" & echo Inhalt von yy:[ !yy!])
Inhalt von yy:[ Na! hallo & bye]

## Problem OHNE delayedExpansion Ich muss die Variabl %xx% in Anführungszeichen setzen:

C:\Users\Biber>set xx
xx=Na! hallo & bye

...  echo Inhalt von xx:"%xx%"
Inhalt von xx:"Na! hallo & bye" 

##Ohne Anführungszeichen stolpert der Interpreter über das "&"-Zeichen.


Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Mar 03, 2014 updated at 17:15:49 (UTC)
Goto Top
moin RaidMan,

man(n) könnte fast meinen das Problem ist bekannt
Ich verweise mal auf die Beschreibung #94915 Batch - setlocal EnableDelayedExpansion - ersetzen von Text, der ein Ausrufezeichen enthält

Gruß Phil
Member: bastla
bastla Mar 03, 2014 updated at 17:55:50 (UTC)
Goto Top
Hallo Biber!

Könntest Du aber natürlich so versuchen:
@echo off & setlocal
md "Na! hallo & bye"  

for /f "delims=" %%i in ('dir /b na*') do (  
    set "yy=%%i"  
    setlocal enabledelayedexpansion
    echo Inhalt von yy:[!yy!]
    endlocal
)
Der Nebeneffekt, dass ohne Klimmzüge der Inhalt von !yy! nach dem endlocal nicht mehr zur Verfügung steht, ist natürlich klar ...
@ RaidMan
Möchtest Du nicht vielleicht einmal darstellen, was Du eigentlich insgesamt erreichen willst?

Grüße
bastla

[Edit] @ PH: Den Thread hätte ich wohl nicht mehr gefunden ... [/Edit]
Member: RaidMan
RaidMan Mar 04, 2014 updated at 12:15:25 (UTC)
Goto Top
Hallo und guten Tag zusammen,

erst einmal vielen Dank für eure Hilfe mein Problem zu lösen
Da ich mich selbst unter Erfolgsdruck gesetzt habe bin ich gerade nicht in der Lage das Thema so richtig theoretisch zu erfassen aber es brennt mir unter den Nägeln einen fehlerfreien Ablauf zu erzielen.

@bastla also die/der batch soll den Inhalt eines Verzeichnisses etwas reorganisieren/Inhalte verschieben ggf Umbennen und eine txt Datei erzeugen die sortierte Infos zum Inhalt enthält. Der Name des Verzeichnis wird als Parameter übergebeben und kann alle Zeichen enthalten die Windows erlaubt.
Später will ich diese "Infodatei" dazu nutzen um sie mit einem Datenbankprogram einzulesen um den Inhalt aller (einige tausend) Verzeichnisse gescheit im Zugriff zu haben.
Bis auf das Problem mit den Steuerzeichen funktioniert es auch.
Besoners fies ist, das es nicht unbedigt eine Fehlermedung gibt wenn ein For, Findstr, Echo >>, ein Zeichen aus einem "String" als Steuerzeichen interpretiert und danach Käse entsteht.
Ich frage mich ob ich nich besser erst die übergebenen %1-%4 auf solche Problem Zeichen prüfe und ggf die Batch abbreche bevor Käse entsteht, allerdings habe ich da auch schone keine Idee wie ich das anstellen könnte, da Prüfen mit Findstr schon mit den Strings Probleme hat ? face-sad

Das Hauptproblem scheint ja zu sein das einig oder alle Befehle die übergebenen %Strings% nicht als einen "String" betrachten,
denn Batch eingangs scheint die Welt ja noch in Ordnung egal was %1 %2 %3 %4 enthalten es wird korekt dargestelt mit
echo %1
echo %1
echo "%~1"
echo "%~2"
usw
mein Problem beginnt erst mit dem verarbeiten der Strings
Member: bastla
bastla Mar 04, 2014 updated at 09:44:55 (UTC)
Goto Top
Hallo RaidMan!

Batch ist natürlich nicht erste Wahl, wenn es um Stringmaniipulationen geht, aber die Sonderzeichenproblematik lässt sich durch konsequentes Verwenden von Anführungszeichen eigentlich ganz gut entschätfen - und wenn die in die Textdatei geschriebenen Informationen für den Import in eine Datenbank gedacht sind, sollte es ja auch kein Problem sein, auch dort Anführungzeichen beizubehalten ...

Grüße
bastla