bartek76
Goto Top

Echo Ausgabe ohne Variablenauflösung

Hallo Gemeinde,

habe eine simple Frage, auf die ich aber bis jetzt keine Antwort fand.

Möchte per Batch den Inhalt einer Datei x in Datei y schreiben.
:: copy lines
for /f "skip=1 tokens=* delims=" %%a in ('type %Dateix%') do (  
  echo %%a>>%Dateiy%
  )
Funktioniert so weit..aber
echo set "tmp=!array[%idx%].hst!"  
ergibt
set "tmp="   
Es wird also versucht die Variable !array[%idx%].hst! aufzulösen.
Gibt es eine Möglichkeit die Zeile 1:1 so zu schreiben wie sie in der Datei x steht? also
echo set "tmp=!array[%idx%].hst!"  
Ausgabe
set "tmp=!array[%idx%].hst!"  
Bin für jeden Tipp sehr dankbar

Content-Key: 333366

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: 132692
132692 27.03.2017 um 11:59:53 Uhr
Goto Top
call set verwenden.

Gruß p.
Mitglied: bartek76
bartek76 27.03.2017 um 12:45:58 Uhr
Goto Top
Danke für die schnelle Antwort, aber komme so auch nicht weiter.
Oder wie genau sollte die Zeile 3 in diese Fall aussehen?

Gruß Bartek
Mitglied: 132692
132692 27.03.2017 aktualisiert um 12:50:57 Uhr
Goto Top
Btw. Arrays gibt es in Batch nicht.

Delayed Expansion aktivieren und die Variable mit call set auflösen, steht doch im verlinkten Beitrag!
Mitglied: bartek76
bartek76 27.03.2017 um 13:12:56 Uhr
Goto Top
Genau darum geht es.
Ich will die Variable nicht auflösen.
Wenn in der Zeile der Quelldatei z.B. !idx! drin steht, dann möchte ich in der Zieldatei ebenfalls !idx! als Text haben und nicht den Wert von idx.

Array hin oder her. es soll als reiner Text behandelt werden.
Mitglied: 132692
132692 27.03.2017 aktualisiert um 18:34:38 Uhr
Goto Top
Dann musst du die Anführungszeichen und Prozentzeichen escapen ^^! und %%
http://www.robvanderwoude.com/escapechars.php
oder Delayed Expansion ausschalten.
echo ^^!array[%%idx%%].hst^^!>Datei.txt
Mitglied: bartek76
bartek76 27.03.2017 um 13:38:49 Uhr
Goto Top
Vielen Dank. So geht es natürlich auch.
Dazu müsste ich eine "suchen, ersetzen" Logik einbauen und den kompletten Inhalt parsen.
Habe gehofft, dass es eine simplere Lösung gibt.

Gruß Bartek
Mitglied: rubberman
Lösung rubberman 27.03.2017, aktualisiert am 28.03.2017 um 00:14:39 Uhr
Goto Top
Hallo Bartek.

Habe gehofft, dass es eine simplere Lösung gibt.
Natürlich gibt es die. Es kommt ja nicht von ungefähr, dass Variablen die in Anführungszeichen stehen expandiert werden - die verzögerte Variablenerweiterung ist eingeschaltet. Ergo: ausschalten.
setlocal DisableDelayedExpansion
for /f "skip=1 tokens=* delims=" %%a in ('type %Dateix%') do (  
  echo %%a>>%Dateiy%
)
endlocal
BTW Das ist vermutlich die einfachere Variante für dein derzeitiges Vorhaben:
<"%Dateix%" >"%Dateiy%" more +1  
Grüße
rubberman
Mitglied: bartek76
bartek76 28.03.2017 um 08:04:25 Uhr
Goto Top
Hallo rubberman,
dein erster Tipp erwies sich als goldrichtig.
Der zweite geht noch einfacher face-wink.
xcopy %Dateix% %Dateiy%
Erfüllt aber nicht meinen Zweck.

Vielen Dank und Gruß
Mitglied: rubberman
rubberman 28.03.2017 um 08:38:38 Uhr
Goto Top
Erfüllt aber nicht meinen Zweck.
Hab ich verstanden. Du willst die erste Zeile loswerden. darum das +1 bei meinem Vorschlag mir MORE.

Grüße
rubberman