powershell

Powershell 文字列置き換え

フォルダ内のファイル全てを対象に文字列置き換え

例えば、スキーマ修飾したDDLが記載されている複数のファイルを一括で、異なるスキーマに変更したい場合などで活躍します。(ファイルの文字コード、改行コードを何にするか適宜書き換えて使ってください)

文字列の一括置き換えスクリプト例

以下は、カレントフォルダ内にあるファイル全てを対象に、sooni という文字列を udonman という文字列に置き換えを行う例です。

$folderFileList = Get-ChildItem -File ".\"
$ENCODING = "UTF8"
# $ENCODING = "default"
$NEWLINECODE = "`n"
# $NEWLINECODE = "`r`n"
foreach($item in $folderFileList)
{
# ファイル名を表示する
$TARGET = Get-ChildItem $item.Name
(Get-Content $TARGET -Encoding $ENCODING) | foreach { $_ -replace "sooni","udonman" } | % { $_ + $NEWLINECODE }  | Set-Content $TARGET  -NoNewline -Encoding $ENCODING
}
実行例
-- 以下のように sooniスキーマのcreate table文をが記載されたファイルが複数あった場合
-- 個別に開いて変更するのはとても面倒なのでこのスクリプトが活躍します
-- 
tmp >> ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/03/22     23:45            169 create_table_code_mst.sql
-a----        2023/03/22     23:45            358 create_table_event_mst.sql
-a----        2023/03/22     23:45            957 create_table_user_mst.sql
-a----        2023/03/22     23:45            615 udonman_household_mst.sql

tmp >>
tmp >> Get-Content .\create_table_code_mst.sql
create table sooni.code_mst (
        code_class      character varying(40)
,       code_key        character varying(20)
,       code_value      character varying(20)
,       priority        integer
);
tmp >> $folderFileList = Get-ChildItem -File ".\"
tmp >> $ENCODING = "UTF8"
tmp >> # $NEWLINECODE = "`n"
tmp >> $NEWLINECODE = "`r`n"
tmp >> foreach($item in $folderFileList)
>> {
>> # ファイル名を表示する
>> $TARGET = Get-ChildItem $item.Name
>> (Get-Content $TARGET -Encoding $ENCODING) | foreach { $_ -replace "sooni","udonman" } | % { $_ + $NEWLINECODE }  | Set-Content $TARGET  -NoNewline -Encoding $ENCODING
>> }
tmp >> 
--
-- 以下の通りsooniスキーマがudonmanスキーマに置き換わっています。
--
tmp >> Get-Content .\create_table_code_mst.sql
create table udonman.code_mst (
        code_class      character varying(40)
,       code_key        character varying(20)
,       code_value      character varying(20)
,       priority        integer
);
tmp >>

フォルダー内ファイル名の一括変更(リネーム)を行うには以下です

スポンサーリンク
タイトルとURLをコピーしました