2016-07-11 10 views
0

Iきた二つのファイル検索とで置き換えたファイルは、コマンドプロンプト

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

は、私はすべてのプロパティを交換する場合は、このファイルを使用しています のproperties.txt

key1=value1 
key2=value2 

とtemplate.txt templates.txtを使ってproperties.txtからファイルに書き出します。 私はそれがpython \ java runtimeで実行されないようにします。なぜなら、前提条件なしでどのマシンでも実行する必要があるからです。

どうすればよいですか?バッチファイル?

+0

質問するときは、試したことに何らかの努力を払うことが望ましいです。ここではコードの書き込み要求(落胆している)があり、あなたは言語を釘付けにしていません。 – Matt

+0

私はあなたに同意しない:私はWindows上で実行時環境なしで検索と置換を行いたい。以下の2つの答えmathiasと@Aaciniは、私が探していたものです。 – 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ファイルに表示される可能性があります。この点は、必要に応じて修正することができます。

関連する問題