2017-05-02 25 views
0

バッチスクリプトを使用して構成ファイルを編集しようとしています。私は周りを見回し、私はpowershellがここに行く方法だと信じています。私はpowershellでの経験がないので、構文が私に問題を引き起こしていると推測しています。ここでpowershellを使用してWindowsバッチファイル内のファイルを編集する

は、私はそれが

<!--add key="MinNumCycles" value="25"/--> 
    <!--add key="MaxNumCycles" value="40"/--> 

    <!--RerunMode: 1 write to DB, 2 write to DB and add to RUN export/--> 
    <add key="RerunMode" value="0"/> 

に見えるようにしたいものをここで私は「何だここ

<!--add key="MinNumCycles" value="25"/--> 
    <!--add key="MaxNumCycles" value="40"/--> 

(このセクションでは、ファイルの真ん中に位置しています)ファイルは、今のように見えるものです私の助けが必要な私のバッチファイルでしようとしています

SET pattern=<!--add key="MaxNumCycles" value="40"/--> 
SET textToAdd1=<!--RerunMode: 1 write to DB, 2 write to DB and add to RUN export/--> 
SET textToAdd2=<add key="RerunMode" value="0"/> 
SET filename=Software.exe.config 

powershell -Command "(gc %filename%) -replace "%pattern%", "$&`n`n%textToAdd1%"'n"%textToAdd2%" | sc %filename%" 

答えて

2
$pattern='<!--add key="MaxNumCycles" value="40"/-->' 
$textToAdd = $pattern + ' 

    <!--RerunMode: 1 write to DB, 2 write to DB and add to RUN export/--> 
    <add key="RerunMode" value="0"/>' 

$filename = "Software.exe.config" 

([IO.File]::ReadAllText($filename).Replace($pattern,$textToAdd) | Set-Content $filename -Force 

私はすべてのPowershellでバッチファイルを個人的に複製する方法です。

  1. あなたのPowershellコマンドが置き換えを行った方法では、RegExが期待した通りに、あなたのパターンは期待通りのものにならないでしょう。 RegExパターンのように一致し、入力したような正確な文字列と一致しません。 .NET文字列メソッド.Replace()を使用する場合は、正確な文字列のみを検索します。
  2. $textToAddには、検索していた文字列(開始と終了の両方の結果に文字列が含まれています)を含む完全形式の最終結果が格納されています。あなたの説明によれば、文字列マーカーはログの真ん中にあるので、これでそれらの更新を行い、ログ全体を再保存することができます。
+0

" [System.Object []]に 'Replace'という名前のメソッドが含まれていないためメソッドの呼び出しに失敗しました。 'powershell.exe -ExecutionPolicy Bypass -File script.ps1' – user1984300

+0

を' $ filename'に対して実行していますが、更新したいファイルへのフルパスを使用していますか?エラーが発生したら、それを確認します –

+0

私は自分のマシンでそれをテストし、すべて正常に動作しました... Powershellのどのバージョンを使用していますか?'$ PSVersionTable'を実行して、バージョン2.0の –

0

PowerShellのコマンドラインから、これは動作しますINGの既存の内容は)conf.batにあります。

$content = Get-Content -Path 'C:\path\to\Software.exe.config' 
$content += "`r`n" 
$content += '<!--RerunMode: 1 write to DB, 2 write to DB and add to RUN export/-->' 
$content += '<add key="RerunMode" value="0"/>' 
Set-Content -Value $content -Path 'C:\path\to\Software.exe.config' 

あなたはスクリプトとしてこれを保存し、使用してそれを実行できます。

ロビンの答えあなたができただけで、別のスクリプトに
powershell.exe -File script.ps1 
+0

'' Get-Content'と 'Set-Content'行の' -Path "conf.bat" 'はおそらく' -Path "software.exe.config" 'でなければなりません。ファイル名は置換可能なパラメータです。 –

+0

申し訳ありません。追加されました。 – Robin

+0

これはファイルの途中で動作しますか?私は、作業中のセクションがファイルの末尾にないことを指定する必要がありました。 – user1984300

0
SET $pattern= '<!--add key="MaxNumCycles" value="40"/-->' 
SET $textToAdd1='<!--RerunMode: 1 write to DB, 2 write to DB and add to 
RUN export/-->' 
SET $textToAdd2='<add key="RerunMode" value="0"/>' 
SET $filename='Software.exe.config' 

(Get-Content $filename) -replace pattern, '`n' $textToAdd1 '`n' $textToAdd2 | Set-Content $filename 

同様走る彼はパンチに私を打ちつけた:

+0

これはまだ私のために働いていません。私はこのように実行しています – user1984300

+0

'powershell -Command"(最後の行を挿入) " – user1984300

関連する問題