今回は、ファイルまたはフォルダーのコピーと移動のサンプルを紹介します。
エクスプローラーのコピー、移動と同じように進行度が表示されますので、現在どれだけコピーが進行しているのかが確認できます。
今回使用する関数は _WinAPI_ShellFileOperation() です。
サンプルコード
#include <WinAPIShellEx.au3>
#include <APIShellExConstants.au3>
#include-once
$File = @ScriptDir & "\ファイル\au3\3画像を使ったボタンのサンプル\A.jpg"
$Dir = @ScriptDir & "\ファイル"
$DirName = StringRegExpReplace($Dir, ".+\\", "")
$errorNum = _FileExplorerCopy($File, "C:\テストフォルダー\")
$errorNum = _FileExplorerCopy($Dir, "C:\テストフォルダー\" & $DirName)
Func _FileExplorerCopy($sFrom, $sTo, $iFunc = $FO_COPY, $iFlags = $FOF_ALLOWUNDO + $FOF_NOCONFIRMMKDIR + $FOF_RENAMEONCOLLISION)
_WinAPI_ShellFileOperation($sFrom, $sTo, $iFunc, $iFlags)
Return @error
EndFunc ;==>_FileExplorerCopy
コードの解説
$File = @ScriptDir & “\ファイル\au3\3画像を使ったボタンのサンプル\A.jpg”
$Dir = @ScriptDir & “\ファイル”
コピーするファイルとフォルダーを各変数に代入します。
$DirName = StringRegExpReplace($Dir, “.+\”, “”)
コピーするフォルダーのフォルダー名のみを正規表現を使い取得します。
$errorNum = _FileExplorerCopy($File, “C:\テストフォルダー\”)
ファイルを指定したコピー先のフォルダー内にコピーします。
$errorNum = _FileExplorerCopy($Dir, “C:\テストフォルダー\” & $DirName)
フォルダーを指定したフォルダー内に同じ名前でコピーします。
コピー元のフォルダー名をコピー先に指定しない場合、例えば「”C:\テストフォルダー\”」のみだと @ScriptDir & “\ファイル” 内のファイルやフォルダーのみを C:\テストフォルダー内にコピーします。
フォルダーをそのままコピー先にコピーしたい場合は、コピー先にコピー元のフォルダー名を指定する必要があります。
名前を変更したい場合は、別の名前を指定すればOKです。
Func _FileExplorerCopy($sFrom, $sTo, $iFunc = $FO_COPY, $iFlags = $FOF_ALLOWUNDO + $FOF_NOCONFIRMMKDIR + $FOF_RENAMEONCOLLISION)
_WinAPI_ShellFileOperation($sFrom, $sTo, $iFunc, $iFlags)
Return @error
EndFunc ;==>_FileExplorerCopy
_WinAPI_ShellFileOperation ( $sFrom, $sTo, $iFunc, $iFlags [, $sTitle = ” [, $hParent = 0]] )
コピー、移動、名前の変更または削除をする関数です。
$sFrom = コピー、移動、名前の変更または削除したいファイルまたはフォルダー名(完全パス)を指定します。
$sFrom には配列を指定することが出来ます。
$sTo = コピー、移動先のファイルまたはフォルダー名(完全パス)。
名前の変更の場合、新しいファイル名の完全パスを指定します。
$iFunc = 実行したい操作を指定します。
$FO_COPY — $sFrom から $sTo へコピーする。
$FO_DELETE — $sFrom を削除します。
$FO_MOVE — $sFrom から $sTo へ移動します。
$FO_RENAME — $sFrom の名前の変更をします。(一度に1つのファイルしか変更できません)
サンプルでは $FO_COPY を指定していますので、移動の場合は $FO_MOVE に変更します。
$iFlags = フラグを指定します。
$FOF_ALLOWUNDO = 可能な限り取り消しを有効。
$FOF_NOCONFIRMMKDIR = コピーまたは移動中に目標のディレクトリがない場合、ユーザーの確認なしにディレクトリを作成します。
$FOF_RENAMEONCOLLISION = コピー、移動、または名前の変更をする際に、同じ名前があった場合、新しい名前を付けます。

配列を使ったサンプルコード
配列に3つのファイルを代入しています。
指定した3つのファイルを目的のフォルダーにコピーします。
#include <WinAPIShellEx.au3>
#include <APIShellExConstants.au3>
#include-once
Global $File[3]
$File[0] = @ScriptDir & "\ファイル\au3\3画像を使ったボタンのサンプル\A.jpg"
$File[1] = @ScriptDir & "\ファイル\au3\3画像を使ったボタンのサンプル\O.jpg"
$File[2] = @ScriptDir & "\ファイル\au3\3画像を使ったボタンのサンプル\T.jpg"
$errorNum = _FileExplorerCopy($File, "C:\テストフォルダー\")
Func _FileExplorerCopy($sFrom, $sTo, $iFunc = $FO_COPY, $iFlags = $FOF_ALLOWUNDO + $FOF_NOCONFIRMMKDIR + $FOF_RENAMEONCOLLISION)
_WinAPI_ShellFileOperation($sFrom, $sTo, $iFunc, $iFlags)
Return @error
EndFunc ;==>_FileExplorerCopy
コメント