Saya memiliki beberapa file konfigurasi di Windows Server 2008 yang bersarang seperti:
C:\Projects\Project_1\project1.config
C:\Projects\Project_2\project2.config
Dalam konfigurasi saya, saya perlu melakukan penggantian string seperti:
<add key="Environment" value="Dev"/>
akan menjadi:
<add key="Environment" value="Demo"/>
Saya berpikir untuk menggunakan skrip batch, tetapi tidak ada cara yang baik untuk melakukan ini, dan saya mendengar bahwa dengan skrip PowerShell Anda dapat dengan mudah melakukan ini. Saya telah menemukan contoh temukan / ganti, tetapi saya berharap cara yang akan melintasi semua folder dalam direktori C: \ Projects saya dan menemukan file apa pun yang diakhiri dengan ekstensi '.config'. Ketika menemukan satu, saya ingin itu mengganti nilai string saya.
Adakah sumber daya yang bagus untuk mencari tahu cara melakukan ini atau pakar PowerShell apa pun yang dapat menawarkan wawasan?
sumber
Jawaban:
Ini percobaan pertama di atas kepalaku.
sumber
ls *.config -rec | %{ $f=$_; (gc $f.PSPath) | %{ $_ -replace "Dev", "Demo" } | sc $f.PSPath }
.
setelahls
. Tersengat oleh itu sendiri.PowerShell adalah pilihan yang baik;) Sangat mudah untuk menghitung file dalam direktori tertentu, membacanya dan memprosesnya.
Skripnya akan terlihat seperti ini:
Saya membagi kode menjadi lebih banyak baris agar dapat dibaca untuk Anda. Perhatikan bahwa Anda dapat menggunakan Set-Content, bukan
[IO.File]::WriteAllText
, tetapi menambahkan baris baru di akhir. DenganWriteAllText
Anda bisa menghindarinya.Jika tidak kode bisa terlihat seperti ini:
$c | Set-Content $_.FullName
.sumber
Pendekatan ini bekerja dengan baik:
sumber
Get-Content $_
denganGet-Content $_.FullName
, dan yang setaraSet-Content
untuk itu untuk menangani file yang tidak ada di root.Saya akan menggunakan xml dan xpath:
sumber
Contoh PowerShell ini mencari semua contoh string "\ foo \" dalam folder dan subfoldernya, menggantikan "\ foo \" dengan "\ bar \" DAN TIDAK MENGUBAH file yang tidak berisi string "\ foo \ "Dengan cara ini Anda tidak menghancurkan file stempel waktu pembaruan terakhir di mana string tidak ditemukan:
sumber
Saya menemukan komentar @Artyom berguna tetapi sayangnya dia belum memposting jawaban.
Ini adalah versi singkat, menurut saya versi terbaik, dari jawaban yang diterima;
sumber
foreach-object
alih-alih%
alias saat menjalankan perintah seperti ini. Jika tidak, ini dapat menyebabkan kesalahan:Expressions are only allowed as the first element of a pipeline
Saya telah menulis sedikit fungsi pembantu untuk mengganti teks dalam file:
Contoh:
sumber
Saat melakukan penggantian rekursif, jalur dan nama file perlu disertakan:
Ini akan mengganti semua "lama" dengan "baru" case-sensitive di semua file folder Anda di direktori Anda saat ini.
sumber