mycroftone
Goto Top

Zeile bis Anführungszeichen übernehmen

Ich möchte eine Zeile in eine Variable übernehmen bis zum ersten "

Testinstall"

bach

Testinstall

for /f "tokens=1 delim="" %%j in (_wis-pak.tmp) do (newest-wis-paket=%%j)

Aber irgendwie will er nicht und bricht mit einem Syntakerror ab.

und nach delim=" hat irgendwie noch niemand gesucht in Googel habe ich es auf jedenfall nicht gefunden.

Das Zeichen " mit ^ Maskieren brachte das selbe Ergebnis.

Kann hier jemand liecht in den Schatten bringen

Content-Key: 137998

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

Printed on: April 19, 2024 at 07:04 o'clock

Mitglied: 76109
76109 Mar 11, 2010 at 14:44:07 (UTC)
Goto Top
Hallo mycroftone!

Eventuell hilft eine Set-Anweisung:
for /f "tokens=1 delim="" %%j in (_wis-pak.tmp) do (SET newest-wis-paket=%%j)

Gruß Dieter
Member: mycroftone
mycroftone Mar 11, 2010 at 15:09:21 (UTC)
Goto Top
Ja das war natürlich ein Fehler wenn man sich nicht Konzentrieren kann kommt sowas vor.

for /f "tokens=1" delim=^" " %%j in (_wis-pak.tmp) do ( set _newest-wis-paket=%%j)  

bracht die Fehlermeldung
"delim" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Das hier

for /f "tokens=1" delim=" " %%j in (_wis-pak.tmp) do ( set _newest-wis-paket=%%j)  

brachte die selbe Fehlermeldung
"delim" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Also mit dem Text " habe ich so meine schwierigkeiten weil der Ja teil des Befehles ist.

 findstr ""PROD_WIS" "wis-8.tmp"   

wo ich also den Text "PROD_WIS suche bleibt in der Batchdatei stehen und nachfolgende Befehle werden nicht abgearbeitet.
Nur ein Str C hilft hier


 findstr "^"PROD_WIS" "wis-8.tmp"   


Also entweder ist das nicht das richtig demaskirzeichen oder hier läuft grundsätzlich was falsch.
Member: Biber
Biber Mar 11, 2010 at 15:33:26 (UTC)
Goto Top
Moin mycroftone,

zu dem Thema "Delimiter soll Anführungszeichen sein"....

Soweit ich es probiert habe, ist ein "Delims=Anfüzeichen" in der FOR/F-Anweisung nicht vorgesehen.

Du kannst es aber mit ein, zwei Skript-Zeilen mehr umgehen.
Beispiel-Spielbatch:
::--- Delims-sei-Anführungszeichen-Beispiel
::Inhalte der Testdatei seinen folgende drei Zeilen
:: test1 ohne Anführungszeichen
:: test2 zwei dito
:: test3 drei "Der dritte" mit Anführungszeichen 
@echo off & SetLocal
Type e:\schnipsel\mycroft.txt
FOR /F "delims=" %%i in (e:\schnipsel\mycroft.txt) do set "line=%%i" & call :ShowIt  
goto :eof


~~ Raum für Notizen

:ShowIt
Set "line=%line:"=§%"  
Set "line=%line: §=§%"  
echo LineNachErsetzen [%line%]
FOR /F "delims=§" %%a in ("%line%") do echo Ausgabe [%%a]  
goto :eof

Ausgabe des Schnipsels:
>e:\schnipsel\mycroft.cmd
test1 ohne Anführungszeichen
test2 zwei dito
test3 drei "Der dritte" mit Anführungszeichen

LineNachErsetzen [test1 ohne Anführungszeichen]
Ausgabe [test1 ohne Anführungszeichen]
LineNachErsetzen [test2 zwei dito]
Ausgabe [test2 zwei dito]
LineNachErsetzen [test3 drei§Der dritte§ mit Anführungszeichen]
Ausgabe [test3 drei]

Die Zeile 16 bewirkt, dass das Leerzeichen vor dem Anführungszeichen auch entsorgt wird.
Wenn du wirklich die Zeile "bis zum Anführungszeichen" brauchst, dann Zeile 16 ausREMen.

Zu deinem zwischenzeitlich geposteten Kommentar: der FindStr-Befehl kennt auch einen Schalter /C für "buchstabengetreuen Vergleich".
Damit kannst du evtl deinen String-in-Anführungszeichen suchen.

Grüße
Biber
Member: bastla
bastla Mar 11, 2010 at 15:33:37 (UTC)
Goto Top
Hallo mycroftone!

Soferne ich das richtig verstehe und es darum geht, den entsprechenden Zeilenanfang aus der ersten Zeile der Datei zu holen, könntest Du es damit versuchen:
@echo off & setlocal
set S=%temp%\Splt.vbs
>%S% echo WScript.Echo Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll, Chr(34))(0)  
for /f "delims=" %%i in ('cscript //nologo %S% "D:\_wis-pak.tmp"') do set "newest-wis-paket=%%i"  
del %S%
echo %newest-wis-paket%
Grüße
bastla
Member: mycroftone
mycroftone Mar 11, 2010 at 15:58:20 (UTC)
Goto Top
Hallo Bastel.

Nein nicht am Anfang ich habe log dateien dort steht z.b.

13.12.2007 "C:\Programme\uninstal\PROD_EPC_1" "PROD_EPC_1" " "C:\uninstal\PROD_EPC_1"
oder
13.12.2007 PM "C:\Programme\uninstal\PROD_EPC_1" "PROD_EPC_1" "
oder
13.12.2007 PM "C:\Program Files\uninstal\PROD_EPC_1" "PROD_EPC_1" "

Und ich brache das PROD_EPC_1
Jetzt habe ich die einzelnen Teile die durch Leerzeichen getrennt sind herausgefilter.


Leider kann ich nicht mit Sicherheit sagen das PROD_EPC_1 immer an 3. Stelle steht. Sonder auch mal an 4. oder 5

Deswegen habe ich alle 3 Teile 3-5 in Pariabeln gepackt und die in textdateien dann.

Um dann zu Prüfen welche die richtige ist.

das findstr "^"PROD_WIS" "wis-4.tmp" zu Prüfen ob ich das "PROD_EPC_1" gefunden habe und nicht das C:\Programme\uninstal\PROD_EPC_1"


Und mit dem for /f "tokens=1 delim="" %%j in (_wis-pak.tmp) do (SET newest-wis-paket=%%j)

wollte ich sicherstellen das ich das PROD_EPC_1 ohne irgendwelche nicht definierbare anzahl von """ hinten dran haben deswegen teile ich das ganze ab am ersten " so meine Idee .

Aber sowohl for /f mit delims als auch findstr haben mit dem " als Text Problem


Das nachmal als Zusatzinfo