PowerShell(置換後ファイルを別フォルダへ)

(本記事はPowerShell入門記事としてコチラにもまとめています。)

PowerShell(複数ファイルの置換)」では複数ファイルの文字列置換を行いましたが、今回は置換後のファイルを別フォルダに格納したいと思います。
dir1が置換前フォルダ
dir2が置換後フォルダ
とします。

では、置換前フォルダのdir1を作ります。中はランダムにフォルダとファイルにします。

PS C:\Users\takk\aaa> 1..6 | %{$n=1}{$r=random;$dir="dir1\\"+$r -replace("(....)","$&\\");mkdir $dir | out-null;1..4 | % {echo $_"    "$r >> $dir/file_$r.txt}}
PS C:\Users\takk\aaa> ls -n -re -file
dir1\11\8467\8195\file_1184678195.txt
dir1\16\1271\2013\file_1612712013.txt
dir1\17\6129\8812\file_1761298812.txt
dir1\20\6212\8419\file_2062128419.txt
dir1\45\1915\907\file_451915907.txt
dir1\70\7329\220\file_707329220.txt
PS C:\Users\takk\aaa>

次にdir1のフォルダ構成だけコピーしたdir2を作ります。

PS C:\Users\takk\aaa> xcopy /t /e dir1 dir2
dir2 は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? d
PS C:\Users\takk\aaa>

フォルダツリーがコピーできたか確認しましょう。

PS C:\Users\takk\aaa> tree dir1
フォルダー パスの一覧
ボリューム シリアル番号は 000000AF C288:F709 です
C:\USERS\TAKK\AAA\DIR1
├─11
│  └─8467
│      └─8195
├─16
│  └─1271
│      └─2013
├─17
│  └─6129
│      └─8812
├─20
│  └─6212
│      └─8419
├─45
│  └─1915
│      └─907
└─70
    └─7329
        └─220
PS C:\Users\takk\aaa> tree dir2
フォルダー パスの一覧
ボリューム シリアル番号は 0000000F C288:F709 です
C:\USERS\TAKK\AAA\DIR2
├─11
│  └─8467
│      └─8195
├─16
│  └─1271
│      └─2013
├─17
│  └─6129
│      └─8812
├─20
│  └─6212
│      └─8419
├─45
│  └─1915
│      └─907
└─70
    └─7329
        └─220
PS C:\Users\takk\aaa>

今、dir1フォルダにある各ファイルはこのような内容となっています。

PS C:\Users\takk\aaa> ls dir1 -n -s -file | %{echo ===dir1\$_===;cat dir1\$_}
===dir1\11\8467\8195\file_1184678195.txt===
1    1184678195
2    1184678195
3    1184678195
4    1184678195
===dir1\16\1271\2013\file_1612712013.txt===
1    1612712013
2    1612712013
3    1612712013
4    1612712013
===dir1\17\6129\8812\file_1761298812.txt===
1    1761298812
2    1761298812
3    1761298812
4    1761298812
===dir1\20\6212\8419\file_2062128419.txt===
1    2062128419
2    2062128419
3    2062128419
4    2062128419
===dir1\45\1915\907\file_451915907.txt===
1    451915907
2    451915907
3    451915907
4    451915907
===dir1\70\7329\220\file_707329220.txt===
1    707329220
2    707329220
3    707329220
4    707329220
PS C:\Users\takk\aaa>

では行末4文字をAAAAに置換してみましょう。置換後のファイルはdir2に置きます。

PS C:\Users\takk\aaa> ls dir1 -n -s -file | %{$old="dir1\\"+$_;$new="dir2\\"+$_;cat $old | %{$_ -creplace "....$","AAAA" >> $new}}
PS C:\Users\takk\aaa>

置換後ファイルを確認します。

PS C:\Users\takk\aaa> ls dir2 -n -re -file | %{echo ===dir2\$_===;cat dir2\$_}
===dir2\11\8467\8195\file_1184678195.txt===
1    118467AAAA
2    118467AAAA
3    118467AAAA
4    118467AAAA
===dir2\16\1271\2013\file_1612712013.txt===
1    161271AAAA
2    161271AAAA
3    161271AAAA
4    161271AAAA
===dir2\17\6129\8812\file_1761298812.txt===
1    176129AAAA
2    176129AAAA
3    176129AAAA
4    176129AAAA
===dir2\20\6212\8419\file_2062128419.txt===
1    206212AAAA
2    206212AAAA
3    206212AAAA
4    206212AAAA
===dir2\45\1915\907\file_451915907.txt===
1    45191AAAA
2    45191AAAA
3    45191AAAA
4    45191AAAA
===dir2\70\7329\220\file_707329220.txt===
1    70732AAAA
2    70732AAAA
3    70732AAAA
4    70732AAAA
PS C:\Users\takk\aaa>

コメント

タイトルとURLをコピーしました