2016-09-23 8 views
0

私は他のファイルへの参照を持っているテキストファイルを持っています。私がしたいのは、実行時にファイルの内容をファイルの内容に置き換えて、これをサーバーにカールさせるスクリプトを実行することです。ファイル名をウィンドウ内のファイル内のファイル内容に置き換えます。

誰でもWindowsのコマンドラインでpowershellなどを使ってこれを行う簡単な方法をお勧めしますか?

"responses": [ 
    { 
     "is": { 
     "statusCode": 200, 
     "headers": { 
      "Location": "http://localhost:4545/myresponse", 
      "Content-Type": "application/xml" 
     }, 
     "body": "@file:myresponse.xml" 
     } 
    }] 

はなる:

"responses": [ 
    { 
     "is": { 
     "statusCode": 200, 
     "headers": { 
      "Location": "http://localhost:4545/myresponse", 
      "Content-Type": "application/xml" 
     }, 
     "body": "<xml> contents of myresponse.xml within same directory.. </xml>" 
     } 
    }] 
+0

あなたはPoShが "windowsコマンドライン"と関係がないことを知っていますか? - powershell.exe aint PoSh;) –

+0

はい..私は経験豊富なWindowsスクリプト作成者ではありませんが、これはpowershellに比べて通常のコマンドラインスクリプトを使用するのはかなり難しいと思っていましたが、私のオプションを開いたままにしておきたいです:) – Pete

答えて

1

次のようなものでPowerShellでそれを行うことができます:あなたのセットアップのすべての仕様に応じた....

$template = Get-Content template.txt -Raw 
$template = [regex]::Replace($template, '(@file:.*?)(?=")', {param($f) Get-Content ($f -replace '@file:') -Raw })) 
Invoke-WebRequest -Uri 'http://example.org/' -ContentType 'application/json' -Method Post -Body $template 

正規表現replaceは、ビット@file:を次のように選択してにし、先頭のビットを削除します。マッチはscriptblockに送られます。このスクリプトブロックはファイルの内容を読み込むためのもので、ファイル名の代わりに置き換えられます。

実際にcurlにする場合は、curl.exeのWindowsで構築する必要があります。同じ名前のPowerShellエイリアスは、同じ方法で動作しようとはしません。

+0

ありがとう、素晴らしい答え! :) – Pete

関連する問題