Autoit|ファイルまたはフォルダーのコピーと移動のサンプル

今回は、ファイルまたはフォルダーのコピーと移動のサンプルを紹介します。

エクスプローラーのコピー、移動と同じように進行度が表示されますので、現在どれだけコピーが進行しているのかが確認できます。

今回使用する関数は _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
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

当サイトでは、Windows用のプログラミング言語「Autoit」で簡単なツールを作成するためのサンプルコード、応用方法を紹介しています。

コメント

コメントする


目次