■ファイル・フォルダの名前変更、ファイル・フォルダの削除
'ファイル・フォルダ名前変更
WScript.CreateObject("Scripting.FileSystemObject").GetFile("C:\test\a.txt").Name = "aa.txt"
WScript.CreateObject("Scripting.FileSystemObject").GetFolder("C:\test").Name = "test1"
'ファイル・フォルダ削除
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile "C:\test\*.*"
WScript.CreateObject("Scripting.FileSystemObject").DeleteFolder "C:\test\1"
Dim wsFSO,FSO
Set wsFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set FSO = CreateObject("Scripting.FileSystemObject")
'環境変数可、対象データ不在エラー回避
Call getTarget("file","C:\test\a.txt","aa.txt")
Call deleteTarget("folder","C:\test\1")
Sub getTarget(dataType,address,rename)
If dataType = "folder" and FSO.FolderExists(envStr(address)) = True Then
wsFSO.GetFolder(envStr(address)).Name = rename
End If
If dataType = "file" and FSO.FileExists(envStr(address)) = True Then
wsFSO.GetFile(envStr(address)).Name = rename
End If
End Sub
Sub deleteTarget(dataType,address)
If dataType = "folder" and FSO.FolderExists(envStr(address)) = True Then
wsFSO.DeleteFolder(envStr(address))
End If
If dataType = "file" Then
If FSO.FileExists(envStr(address)) = True or FSO.FolderExists(deleteAsterisk(envStr(address))) = True Then
wsFSO.DeleteFile(envStr(address))
End If
End If
End Sub
Function envStr(address)
envStr = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings(address)
End Function
Function deleteAsterisk(address)
If Right(address,3)="*.*" Then
deleteAsterisk = Left(address,Len(address)-Len("*.*"))
ElseIf Right(address,1)="*" Then
deleteAsterisk = Left(address,Len(address)-Len("*"))
Else
deleteAsterisk = address
End If
End Function
■対象フォルダのサブフォルダ以下削除
Dim f, gf, so
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder("C:\test\1")
For Each f In gf.SubFolders
so.DeleteFolder f, True
Next
Set gf = Nothing
Set so = Nothing
'プログラムファイルの存在するフォルダ内のすべてのサブフォルダを削除する場合は3行目を下記に変更
'Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
Call deleteSubFolders("C:\test")
Sub deleteSubFolders(address)
Dim f
For Each f In CreateObject("Scripting.FileSystemObject").GetFolder( envStr(address) ).SubFolders
CreateObject("Scripting.FileSystemObject").DeleteFolder f, True
Next
End Sub
Function envStr(address)
envStr = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings( address )
End Function
■ファイル名・フォルダ名の変更・削除を行う際の備考
名前変更・削除をするファイル・フォルダがなかった場合はエラーメッセージが出てvbsファイル全体の処理が止まる。(例外だけれど、フォルダの中身全部削除という命令の場合はフォルダの中が空でもエラーなく動く)
一旦Ifで対象のファイル・フォルダがあるかどうかを調べてTrueなら変更・削除命令を出すようにするとエラーは起きない。
target = "C:\test"
'対象フォルダの有無の確認
If CreateObject("Scripting.FileSystemObject").FolderExists( target ) = True then
'処理
WScript.CreateObject("Scripting.FileSystemObject").DeleteFolder( target )
End If
'もし環境変数を使いたい場合は下記の関数
'target = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%LOCALAPPDATA%\hoge")
システムファイルの名前変更・削除は基本エラーでできない。したい場合はvbsに管理者権限を付与する必要がある。
'管理者権限を付与
Option Explicit
Dim WMI, OS, Value, Shell
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
'##### WScript5.7 または Vista 以上かをチェック
Set WMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set OS = WMI.ExecQuery("SELECT *FROM Win32_OperatingSystem")
For Each Value in OS
if left(Value.Version, 3) < 6.0 then exit do
Next
'##### 管理者権限で実行
Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas"
WScript.Quit
loop
'##### メイン処理を実行
WScript.Echo "Hello World"
■ファイル・フォルダを開く
当該ファイル・フォルダがない場合はエラーもなくスルーする。
もしvbsファイルの文字コードがS-JIS以外の場合でパスに空白・漢字・記号があったら文字コードの互換ができてないんできちんと機能しない。
'環境変数未対応
WScript.CreateObject("Shell.Application").Explore "C:\test"
Call openTarget("%APPDATA%")
Sub openTarget(address)
WScript.CreateObject("Shell.Application").Explore envStr( address )
End Sub
Function envStr(address)
envStr = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings( address )
End Function
'コメントです
rem コメントです
基本一行ずつしかコメントアウトできない。
複数行コメントアウトしたい場合は「If false then~End If」がいいかもしれない。
■環境変数を使いたい場合
WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%LOCALAPPDATA%\hoge")
■シャットダウン
CreateObject("WScript.Shell").Run "%WINDIR%\system32\shutdown.exe -s -t 0", 0
■Msgbox内での改行
MsgBox("改行" & vbCr & "しました")