コメントのコードは近いですが、構文上の問題がいくつかあります。それは強いから始まります:
$mabyIni = "C:\New\Path"
$AiniFile = Get-ChildItem - Path "C:\New\Path*" -include *.ini -recurse
ForEach($file in $AiniFile) {
これまでのところ、とても良いです。新しいパスを定義すると、古いパスに.iniファイルのリストが表示され、それらのファイルをループします。これまでのところ、これはすべて良いコードです。それから、物事は迷い始めます。
私は疑問に文字列を置換、あなたはそれぞれの.iniファイルの内容を取得しようとしていることを確認した後、これで新しいパスにファイルを出力
:
(Get-Content $AiniFile.PSPath) | ForEach-Object {
$file -replace [regex]:Escape('C:\A\Path'),('$mabyIni')
}| Set-Content $mabyIni -include *.ini
残念ながら、あなたが使用しています間違った変数を追加し、追加のForEach
ループを追加します。 Get-Content
行から始めましょう。スクリプトのこの時点で、ファイルをループしており、現在の各ファイルは$file
で表されています。だからあなたが実際に内容を取得したいのは$file
であり、$AiniFile.PSPath
ではありません。
(Get-Content $file)
[OK]をクリックすると、そのファイルの内容が文字列の配列として取得されます。さて、私はあなたが認識していないと推測していますが、-Replace
演算子は文字列の配列に作用します。完璧な、私たちはちょうど弦の配列を得たことが起こる! Get-Content
コマンドはカッコで囲まれているので、最初に完了します。ちょうどその直後の-Replace
コマンドをタックすることができます。
(Get-Content $file) -replace [regex]:Escape('C:\A\Path'),$mabyIni
あなたが持っていた-replace
コマンドはスーパークローズでした!実際、そこに[regex]::escape()
を使用するための小道具を提供しなければなりません。それはまったくプロの動きで、うまくいった!唯一の問題は、置換文字列がカッコで囲まれている必要はなく、一重引用符で囲まれているため文字列が展開されず、.iniファイルのすべてに次のような行が含まれているということです:
AIniText = $mabyIni\AIniText
あなたは私が推測しているものではありませんので、かっこを取り除きました(何も傷つけていませんでしたが、どちらも助けていないので、清潔さとシンプルさのために取り除きました)。一重引用符'
も同様です。実際には、その変数に格納されている文字列が必要です。
はだから今我々は、ファイルをループの内容を読んで、新しいパスで古いパスを交換している、残っているすべての出力に新しい.iniファイルです。既に配置されているように見えるので、ファイルの既存のパスを使用して、更新されたデータにコンテンツを設定します。
(Get-Content $file) -replace [regex]:Escape('C:\A\Path'),$mabyIni | Set-Content -Path $File.FullName
OK、完了! ForEach
ループを閉じて実行するだけです。
$mabyIni = "C:\New\Path"
$AiniFile = Get-ChildItem - Path "C:\New\Path*" -include *.ini -recurse
ForEach($file in $AiniFile) {
(Get-Content $file) -replace [regex]:Escape('C:\A\Path'),$mabyIni | Set-Content -Path $File.FullName
}
iniファイルでPathを検索し、 を新しいものと置き換える必要があります。私も試してみました:$ mabyIni = "C:\新しい\パス" $ AiniFile =は、Get-ChildItemコマンドレット - パス "C:\新しい\パス\ *" -include *の.ini -recurse のForEach($ AiniFileで$ファイル) { (Get-Content $ AiniFile.PSPath)| のForEach-Opject {$ファイル-replace [正規表現]:エスケープ( 'C:\パス\')、( '$ mabyIni')} | セット内容$ mabyIni -include * .ini – Mkey
質問を更新してコメントを投稿しないでください。あなたのコメントのコードは本当に読みにくいです。それにかかわらず、私はあなたのコメントにコードの問題を見て、それがうまくいかなかった理由について答えを書いてみましょう。 – TheMadTechnician