やりたいこと
指定したPathから指定したファイル一覧のファイルを指定Pathにコピーする。
大量にあるファイルの中から一部をコピーしたい場合に、1つ1つ探すのが手間だった。
条件
・Path指定のファイルとファイル一覧は別ファイルで切り出し
・クリックで実行するために実行ファイル形式にしたい
・簡単なログも出したい
test.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 設定ファイル読み込み . $PSScriptRoot"\config.ps1" #ログ出力 Start-Transcript $PSScriptRoot"\"$result function fileCopy($picList) { $lines = (get-content $picList) -as [string[]] foreach($line in $lines){ # コメントと空行を除外 if($line -match "^$"){ continue } if($line -match "^\s*#"){ continue } copy-item $inputPath$line $outputPath if($?){ echo $line"をコピーしました" } } } fileCopy $PSScriptRoot"\"$picList Stop-Transcript |
sponsored link
config.ps1
textlist.txtはスクリプトど同フォルダに用意。
コピーしたいファイル名を1行ごとに記載
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#設定してください #入力ファイルのフォルダ $inputPath="C:\input\" #出力ファイルのフォルダ $outputPath="C:\output\" #固定値 #################################### #ファイルリスト $picList="textlist.txt" #結果用ファイル $result="result.txt" |
解説
・設定ファイルは外に切り出した。設定ファイルもps1形式で作成してよいのであれば読ませるだけ
・$PSScriptRootでスクリプトの配置フォルダを取得できる
・Start-Transcriptで出力した内容を記録できる
・picListはテキストファイルなので、空欄行の考慮など入れる
・$?で直前の結果がtrue,falseでとれる
・powershell .\test.ps1 のバッチファイルを作成すればクリックで実行に