フォルダ内のファイル全てを対象に文字列置き換え
例えば、スキーマ修飾した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 >>