(本記事は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>


コメント