Nameステートメント
Nameステートメントを利用するとファイル名やフォルダ名を変更することが出来ます。
「Name」というと名前だけのように見えますが、変更後の名前はファイル名だけでなくフォルダパスも指定することが出来るため、結果としてファイルやフォルダの移動も行うことが可能になります。
構文
Name Oldpathname As Newpathname
Oldpathname | 変更前のファイル名やフォルダ名を指定します。ファイル名のみ指定した場合はカレントディレクトリのファイルが対象になります。ワイルドカードの指定は出来ません。 |
Newpathname | 変更後のファイル名やフォルダ名を指定します。ファイル名のみ指定した場合はカレントディレクトリのファイルが対象になります。変更前と異なるフォルダパスを指定した場合はそちらに移動します。 |
ファイル名を変えずに別フォルダに移動させたい場合
よくある用途で、ファイル名を変えずに別のフォルダに移動させたい場合があります。
変更前と変更後のファイル名は変わりませんが、それでも変更後のファイル名は設定する必要があります。
1 |
Name "C:\abc\abc\abc\abc\abc\abc\12345.txt" As "C:\AAAAA\12345.txt" |
フォルダ名の変更やフォルダの移動の場合の\マーク
フォルダ名の変更や移動の場合のフォルダパスの末尾の\マークですが、付けても付けなくてもどちらでも構いません。
変更前と変更後どちらもです。
なので、以下のコードはいずれも正しく動作します。
1 2 3 4 |
Name "C:\test\a" As "C:\test\b" Name "C:\test\a" As "C:\test\b\" Name "C:\test\a\" As "C:\test\b" Name "C:\test\a\" As "C:\test\b\" |
フォルダ移動でエラー58が発生した場合
フォルダの移動をしようと思ってNameステートメントを実行した際に「エラー58(既に同名のファイルが存在しています。)」のエラーに遭遇することがあります。
でも、移動先のフォルダを見ても、別に同じフォルダなんか無いのになあ、、、と思ってるのはNameステートメントの挙動を勘違いしています。
Nameステートメントはあくまでも「名前の変更」です。
移動先のフォルダの中に入れたいのであれば、移動先のフォルダパス+移動元のフォルダ名、とコードを書かなければなりません。
確認してみてください。
サンプルコード
ファイル移動、フォルダ移動、ファイル名変更、フォルダ名変更のサンプルです。
それぞれほとんど同じコードです。
1. ファイル移動のサンプル
1 2 3 4 5 6 7 8 9 10 |
Sub NameTest1() Dim a Dim b '// ファイル移動 a = "C:\test\b\a.txt" b = "C:\test\a.txt" Name a As b End Sub |
2. フォルダ移動のサンプル
1 2 3 4 5 6 7 8 9 10 |
Sub NameTest2() Dim a Dim b '// フォルダ移動 a = "C:\test\a" b = "C:\test\b\e" Name a As b End Sub |
3. ファイル名変更のサンプル
1 2 3 4 5 6 7 8 9 10 |
Sub NameTest3() Dim a Dim b '// ファイル名変更 a = "C:\test\b\a.txt" b = "C:\test\b\bbbb.txt" Name a As b End Sub |
4. フォルダ名変更のサンプル
1 2 3 4 5 6 7 8 9 10 |
Sub NameTest4() Dim a Dim b '// フォルダ名変更 a = "C:\test\b\" b = "C:\test\bbbbb\" Name a As b End Sub |