ファイルを移動する方法
スポンサーリンク
Powershell でファイルを移動するには Move-Item コマンドレットを使用します。
移動先にファイルが存在する場合、移動を行わない
移動先にファイルが存在する場合、処理を中止してエラー処理を行う場合のサンプルコードは次の通りです。
PowerShell(実行可能なサンプルコード) | |
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 28 | $path_from = 'd:\temp\移動元\test.txt' $path_to = 'd:\temp\移動先\test.txt' $path_to_folder = Split-Path $path_to -parent # 移動元ファイルの存在チェック if(-not(Test-Path($path_from))){ Write-Host '移動元ファイルが存在しないので終了します' exit } # 移動先ファイルを格納するフォルダの存在チェック if(-not(Test-Path($path_to_folder))){ Write-Host '移動先ファイルを格納するフォルダが存在しないので終了します' exit } try{ # 実行時のエラーを catch できるように ErrorAction に Stop を設定 Move-Item $path_from $path_to -ErrorAction Stop }catch [Exception]{ Write-Host 'エラーが発生しました。' Write-Host $Error # 以下、エラー処理を記述 Write-Host 'エラー処理' } |
移動先にファイルが存在する場合、上書きで移動する
移動先にファイルが存在する場合、移動先のファイルを上書きして移動する場合のサンプルコードは次の通りです。上書きの場合、 Move-Item に -force を指定します。
PowerShell(実行可能なサンプルコード) | |
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 28 29 | $path_from = 'd:\temp\移動元\test.txt' $path_to = 'd:\temp\移動先\test.txt' $path_to_folder = Split-Path $path_to -parent # 移動元ファイルの存在チェック if(-not(Test-Path($path_from))){ Write-Host '移動元ファイルが存在しないので終了します' exit } # 移動先ファイルを格納するフォルダの存在チェック if(-not(Test-Path($path_to_folder))){ Write-Host '移動先ファイルを格納するフォルダが存在しないので終了します' exit } try{ # 実行時のエラーを catch できるように ErrorAction に Stop を設定 Move-Item $path_from $path_to -force -ErrorAction Stop }catch [Exception]{ Write-Host 'エラーが発生しました。' Write-Host $Error # 以下、エラー処理を記述 Write-Host 'エラー処理' } |
移動先にファイルが存在する場合、名前を変更して移動する
次のサンプルコードは、移動先に同名のファイルが存在する場合、名前を変更して移動します。例えば test.txt を移動する場合、同じ名前のファイルがあれば test_1.txt とします。もし test_1.txt も存在する場合は、 test_2.txt、 test_3.txt と名前の後の数字をインクリメントさせます。このサンプルコードでは最大 1000 までインクリメントしますが、 for 文を書きかえればインクリメントの上限は変更可能です。
PowerShell(実行可能なサンプルコード) | |
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | $path_from = 'd:\temp\移動元\test.txt' $path_to = 'd:\temp\移動先\test.txt' $path_to_folder = Split-Path $path_to -parent # 移動先に同名ファイルが存在する場合のリネーム用の変数 $path_to_basename_with_path = [System.IO.Path]::GetDirectoryName($path_to) ` + '\' ` + [System.IO.Path]::GetFileNameWithoutExtension($path_to) $path_to_extension = [System.IO.Path]::GetExtension($path_to) # 移動元ファイルの存在チェック if(-not(Test-Path($path_from))){ Write-Host '移動元ファイルが存在しないので終了します' exit } # 移動先ファイルを格納するフォルダの存在チェック if(-not(Test-Path($path_to_folder))){ Write-Host '移動先ファイルを格納するフォルダが存在しないので終了します' exit } try{ for($i = 0; $i -lt 1000; $i++){ if($i -gt 0){ # ファイルが存在する場合、ファイル名をカウント変数付きに変更。 $path_to = $path_to_basename_with_path + '_' + $i + $path_to_extension } # ファイルが存在しない場合のみ移動する。 # ファイルが存在する場合は、ループしてファイル名を変更して再度チェック。 if(-not(Test-Path($path_to))){ # 実行時のエラーを catch できるように ErrorAction に Stop を設定 Move-Item $path_from $path_to -force -ErrorAction Stop # ループ終了 break } } }catch [Exception]{ Write-Host 'エラーが発生しました。' Write-Host $Error # 以下、エラー処理を記述 Write-Host 'エラー処理' } |
スポンサーリンク