2016-04-15 11 views
-1

ich eine Textdatei datei.txt mit dem Inhalt haben:Batch-Typ-Datei mit Variablen

% hallo%

Wenn ich hallo gesetzt habe auf „Holi“ ist es eine Möglichkeit, kann file.txt eingeben und den variablen Inhalt auflösen?

Vielleicht ist es archivierbar Rohrleitungen Echo aber

Typ file.txt | echo

Funktioniert nicht für mich.

Jede Hilfe wird geschätzt.

Dank

+1

Können Sie klären, was du machen willst und was ist dein Problem? Was bedeutet es, dass Sie "Holi" begrüßen? Was meinst du mit der Auflösung variabler Inhalte? – kaskader

+0

@kaskader - Fradantim hat eine Umgebungsvariable namens 'hallo' mit einem Wert von' holi'. Er möchte den Inhalt der Datei schreiben, aber Variablennamen in Prozent, die erweitert werden sollen. – dbenham

+0

danke @dbenham, viel klarer jetzt! Es wäre toll, wenn Sie die Frage neu schreiben könnten, damit sie leichter zu verstehen ist! – kaskader

Antwort

3

Unter der Annahme, keine Leerzeilen gibt, die

aufbewahrt werden müssen
for /f usebackq^ delims^=^ eol^= %%A in ("yourFile.txt") do call echo(%%A 

Wenn es Leerzeilen, aber keine Zeile beginnt mit :, dann

for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "yourFile.txt"') do call echo(%%B 

Wenn Leerzeilen vorhanden sind und einige Zeilen mitbeginnen, und es gibt keine ! Literale

setlocal enableDelayedExpansion 
for /f "delims=" %%A in ('findstr /n "^" "yourFile.txt"') do (
    set "ln=%%A" 
    call echo(!ln:*:=! 
) 

Wenn es Leerzeilen und einige Linien beginnen mit :, und es gibt ! Literale

for /f "delims=" %%A in ('findstr /n "^" "yourFile.txt"') do (
    setlocal enableDelayedExpansion 
    set "ln=%%A" 
    call echo(!ln:*:=! 
    endlocal 
) 

Alle der oben genannten Verwendung AUFFORDERUNG, die nach unten Dinge verlangsamt wesentlich. Die Lösung ist schneller, wenn Sie !hello! in Ihrer Datei anstelle von %hello% setzen, und dann können Sie sich auf verzögerte Erweiterung verlassen, um die Variable zu erweitern.

Wenn keine Leerzeilen

setlocal enableDelayedExpansion 
for /f usebackq^ delims^=^ eol^= %%A in ("yourFile.txt") do echo(%%A 

Wenn Leerzeilen, aber keine Zeile beginnt mit :

setlocal enableDelayedExpansion 
for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "yourFile.txt"') do echo(%%B 

Wenn Leerzeilen, und einige Linien beginnen mit :

setlocal enableDelayedExpansion 
for /f "delims=" %%A in ('findstr /n "^" "yourFile.txt"') do (
    set "ln=%%A" 
    echo(!ln:*:=! 
) 
+0

Danke! Das war genau das, wonach ich suchte! Dein 3. Beispiel hat einfach super funktioniert. Danke für die schnelle Antwort. – Fradantim

3

Also nehme ich es Ihnen, den Inhalt einer Datei wie Variablen nur erweitert werden soll.

Hier gehen Sie:

>echo %hello%>file.txt 

>type file.txt 
%hello% 

>set hello=holi 

>type file.txt 
%hello% 

>for /f %f in (file.txt) do @echo %f 
%hello% 

>for /f %f in (file.txt) do @call echo %f 
holi 

> 
+0

Danke für das Verständnis und die Antwort so schnell. Dies ist eine großartige Antwort, aber es wird nicht funktionieren, wenn die Datei Zeilen mit mehr als nur der Variablen enthält, wie "a% hallo%" oder "a% hallo%" oder "% hallo% a". Sory, ich hätte das sagen sollen. – Fradantim

+0

@Fradantim Ich habe es versucht und es funktioniert, zumindest in den Situationen, die Sie erwähnt haben. Es funktioniert jedoch nicht mit Leerzeilen - in dieser Hinsicht hat Dbenham Ihnen die bessere Antwort gegeben. –