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

Printed on: April 18, 2024 at 23:04 o'clock

Mitglied: 132692
132692 Mar 27, 2017 at 09:59:53 (UTC)
Goto Top
call set verwenden.

Gruß p.
Member: bartek76
bartek76 Mar 27, 2017 at 10:45:58 (UTC)
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 Mar 27, 2017 updated at 10:50:57 (UTC)
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!
Member: bartek76
bartek76 Mar 27, 2017 at 11:12:56 (UTC)
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 Mar 27, 2017 updated at 16:34:38 (UTC)
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
Member: bartek76
bartek76 Mar 27, 2017 at 11:38:49 (UTC)
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
Member: rubberman
Solution rubberman Mar 27, 2017 updated at 22:14:39 (UTC)
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
Member: bartek76
bartek76 Mar 28, 2017 at 06:04:25 (UTC)
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ß
Member: rubberman
rubberman Mar 28, 2017 at 06:38:38 (UTC)
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