2016-07-11 4 views
0

Я два файла properties.txtПоиск и замена в файлах из окна командной строки

key1=value1 
key2=value2 

и template.txt, который использует этот файл

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

Я хочу, чтобы заменить все свойства from properties.txt с template.txt и записать его в файл. Я не хочу, чтобы он работал на python \ java runtime, так как он должен запускаться на любой машине без предварительных условий.

Как это сделать с помощью powershell? пакетные файлы?

+0

При задании вопросов предпочтительно, чтобы вы проявили некоторое усилие в том, что вы пробовали. У вас есть запрос на запись кода (который обескуражен) здесь, и вы даже не прикрепили язык. – Matt

+0

Я не согласен с вами: я хочу выполнять поиск и замену без среды выполнения в Windows. Два ответа на них - матиас и @ Аасини - это именно то, что я искал. – omer727

ответ

3

Предполагая, что это должно быть в состоянии работать на PowerShell 2.0, это то, что я хотел бы сделать:

# 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 

Этот код удалить восклицательные знаки которые могут отображаться в файле template.txt. Эта точка может быть исправлена, если это необходимо.