2016-07-11 5 views
0

Ich habe zwei Dateien properties.txtSuchen und Ersetzen in Dateien von Windows-Eingabeaufforderung

key1=value1 
key2=value2 

und template.txt, die diese Datei verwendet

$key1 xcvsdf sfd $key1 sdf 
$key2 lorem $key2 ipsum 

ich alle Eigenschaften ersetzen möchten aus properties.txt mit template.txt und schreibe es in eine Datei. Ich möchte nicht, dass es auf Python \ Java Runtime läuft, da es auf jedem Rechner ohne Vorraussetzungen laufen sollte

Wie kann ich das mit Powershell tun? Stapeldateien?

+0

Wenn Sie Fragen stellen, ist es bevorzugt, dass Sie etwas Mühe in dem, was Sie versucht haben, zeigen. Sie haben hier eine Code-Schreib-Anfrage (die davon abgeraten wird) und Sie haben noch nicht einmal eine Sprache gefunden. – Matt

+0

Ich stimme dir nicht zu: Ich möchte ohne Laufzeitumgebungen unter Windows suchen und ersetzen. Die zwei Antworten Mathias und @Aacini unten sind genau das, wonach ich gesucht habe. – omer727

Antwort

3

Angenommen, dies auf Powershell ausführen zu können, muss 2.0, ist es das, was ich tun würde:

# Read template from file 
$template = Get-Content .\template.txt 

# Copy template to result variable 
$result = $template 

# Loop through list of properties 
Get-Content C:\dev\properties.txt |ForEach-Object{ 
    # Split each line into key-value pairs 
    $key,$value = $_ -split '=',2 
    # Replace the placeholder with the appropriate value 
    $result = $result -replace ('\${0}' -f $key),$value 
} 

# Output final result 
$result |Out-File .\result.txt 
2
@echo off 
setlocal EnableDelayedExpansion 

rem Load the set of replacement values from properties.txt 
set "n=0" 
for /F "tokens=1,2 delims==" %%a in (properties.txt) do (
    set /A n+=1 
    set "key[!n!]=%%a" 
    set "value[!n!]=%%b" 
) 

rem Process template.txt file 
(for /F "delims=" %%a in (template.txt) do (
    set "line=%%a" 
    rem Process each replacement value 
    for /L %%i in (1,1,%n%) do (
     for /F "tokens=1,2" %%x in ("!key[%%i]! !value[%%i]!") do (
     set "line=!line:$%%x=%%y!" 
    ) 
    ) 
    echo !line! 
)) > output.txt 

output.txt:

value1 xcvsdf sfd value1 sdf 
value2 lorem value2 ipsum 

Dieser Code die Ausrufezeichen entfernen das kann in der template.txt Datei erscheinen. Dieser Punkt kann bei Bedarf behoben werden.