(本記事は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>
コメント