特殊フォルダを取得(wsh.SpecialFolders)
CreateObject 関数:特殊フォルダを取得(WSH.SpecialFolders)
Windows Scripting Host(WSH)のSpecialFolders プロパティを使うと、Windows の特殊フォルダ(マイドキュメントやデスクトップなど)のパスを取得することができます。WSH を使用するには、CreateObject 関数 を使用します。
<name で指定した特殊フォルダのパスを取得>
Dim wsh [ As Object ]
Set wsh = CreateObject (“WScript.Shell”)
path = wsh.SpecialFolders(findex)
引数・戻り値
- wsh ・・・ Windows Scripting Host(WSH)のオブジェクト
- findex ・・・ 取得したい特殊フォルダ(文字列または値)を指定します。
※ 文字列を指定する場合は、“ で囲みます(”AllUsersDesktop”)。
文字列 値 内容 AllUsersDesktop 0 すべてのユーザーに共通のデスクトップ AllUsersStartMenu 1 すべてのユーザーに共通のスタートメニュー AllUsersPrograms 2 すべてのユーザーに共通のプログラムメニュー AllUsersStartup 3 すべてのユーザーに共通のスタートアップ Desktop 4 ログインユーザーのデスクトップ AppData 5 ログインユーザーのアプリ用データ PrintHood 6 ログインユーザーのプリンタ Templates 7 ログインユーザーの新規作成のテンプレート Fonts 8 フォント NetHood 9 ログインユーザーのネットワーク Desktop 10 ログインユーザーのデスクトップ StartMenu 11 ログインユーザーのスタートメニュー SendTo 12 ログインユーザーの送る Recent 13 ログインユーザーの最近使ったファイル Startup 14 ログインユーザーのスタートアップ Favorites 15 ログインユーザーのお気に入り MyDocuments 16 ログインユーザーのマイドキュメント Programs 17 ログインユーザーのプログラムメニュー - path ・・・ findex で指定した特殊フォルダのパス
Windows 特殊フォルダ取得 使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub Sample_SpecialFolder() Dim wsh As Object Set wsh = CreateObject("WScript.Shell") MsgBox wsh.specialfolders("AllUsersDesktop") & vbCrLf & _ wsh.specialfolders("AllUsersStartMenu") & vbCrLf & _ wsh.specialfolders(2) & vbCrLf & _ wsh.specialfolders("MyDocuments") Set wsh = Nothing End Sub |
実行結果
関連記事
-
Excel の組み込みダイアログボックス(Dialog, Dialogs)
Excel の組み込みダイアログボックスを表示 Dialog オブジェクト を使 …
-
テキストファイル:データを書き込む(Write # ステートメント)
Write # ステートメント Open ステートメント をシーケンシャル出力モ …
-
「名前を付けて保存」ダイアログボックスを表示(GetSaveAsFilename メソッド)
GetSaveAsFilename メソッド 「名前を付けて保存」ダイアログボッ …
-
テキストファイル:データを読み込む(Input # ステートメント)
Input # ステートメント Open ステートメント をシーケンシャル入力モ …
-
「ファイル」ダイアログボックスを表示・設定(FileDialog オブジェクト)
FileDialog オブジェクト FileDialog オブジェクト のメソッ …
-
テキストファイル:データを読み込む(Input 関数・InputB 関数)
Input 関数・InputB 関数 Open ステートメントをシーケンシャル入 …
-
「ファイルを開く」ダイアログボックスを表示(GetOpenFilename メソッド)
GetOpenFilename メソッド ファイル名を取得するための、「ファイル …
-
フォルダ名・ファイル名を変更(Name ステートメント)
フォルダ名およびファイル名を変更 Name ステートメント で、ファイル、ディレ …
-
Open ステートメントで使用できるファイル番号を取得(FreeFile 関数)
FreeFile 関数 Open ステートメントで使用するファイル番号( 1 ~ …
-
FileDialog オブジェクトを取得する(FileDialog プロパティ)
FileDialog プロパティ FileDialog オブジェクト を取得しま …
Comment
はじめまして
デスクトップにMoro というフォルダがあります。
その中に123.txtと456.txtと789.txtという隠しファイルがあります。
そのファイルをProgram files (x86)のSakiというフォルダにコピーし、隠し属性を解除したいのですが可能でしょうか?
また、パソコン毎にユーザー名が変わります。
そして、メッセージボックスで
コピーする前にOKとキャンセルボタンを表示し、OKならばコピーし、コピーが終わると完了しました。とメッセージが出て、キャンセルならば中断しました。とメッセージが出るようにすることは、可能でしょうか?
VBSでしたいのですが可能でしょうか?
できればコードを提示して頂けるとありがたいです。
以上、上手く説明できませんがよろしくお願いします。
コメントありがとうございます。
VBSは普段殆ど使わないのですが一応作ってみました。
多分管理者権限で実行しないとエラーが発生します(コピーに失敗)。
エラー処理は行っていません。
ありがとうございます。
感謝、感激です。
管理人様の言う通り管理者権限で実行しないと、エラーになります。
管理者権限で実行することは、可能でしょうか?
また、今は、ファイル一つずつの確認してコピーですが、まとめて確認してコピーすることは可能でしょうか?
お手数をお掛けしますが見て頂けたら嬉しいです。
前回も書きましたが、VBSは普段使いません。
一応自分の環境では動きました。
管理人さん
はじめまして
いつも参考にさせて頂いております。
「VBSは普段使いません。」とのことですが
質問させて下さい。
上のコピーのコードを参考に削除する方を作成しているのですが
C:\Program Files (x86)\bbb\b1.txt
C:\Program Files (x86)\bbb\b2.txt
C:\Program Files (x86)\ccc\c1.txt
C:\Program Files (x86)\ccc\c2.txt
C:\Program Files (x86)\ddd\d1.txt
このようにファイルがあります。
\bbb\、\ccc\、\ddd\の中に対象のファイルが一つでもあれば削除して
MsgBox “削除を完了しました”
\bbb\、\ccc\、\ddd\の中に対象のファイルが一つもなければ
MsgBox “ファイルがありません”
このようにしたいのですが、どのように修正すれば良いのでしょうか?
ご迷惑をお掛けいたしますが、ご教授願います。
以下コードです。
見て頂ければわかると思うのですが、最初にOKを押すと
「ファイルがありません」と表示され、
またOkを押すと「ファイルがありません」が続きます。
最後に「削除を完了しました」と表示されます。
Option Explicit
Dim fso, wsh
Dim FileNameFrom, FileNameTo
Dim ArrayFileNames, myDir1, myDir2, f
Dim Result, Prompt, Buttons, Title
Dim obj
‘管理者としてVBS実行
Set obj = Wscript.CreateObject(“Shell.Application”)
if Wscript.Arguments.Count = 0 then
obj.ShellExecute “wscript.exe”, WScript.ScriptFullName & ” runas”, “”, “runas”, 1
Wscript.Quit
end if
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set wsh = CreateObject(“WScript.Shell”)
myDir1 = “\bbb\”
myDir2 = “\ccc\”
myDir2 = “\ddd\”
ArrayFileNames = Array(“b1.txt”,”b2.txt”,”c1.txt”,”c2.txt”,”d1.txt”)
Prompt = “削除しますか?”
Buttons = vbOKCancel + vbInformation + vbDefaultButton2
Title = “VBS”
Result = MsgBox(Prompt, Buttons, Title)
If Result = vbOK Then
for each f in ArrayFileNames
if fso.FileExists(FileNameTo) = true Then
FileNameTo = “C:\Program Files (x86)” & myDir1 & f
FileNameTo = “C:\Program Files (x86)” & myDir2 & f
FileNameTo = “C:\Program Files (x86)” & myDir3 & f
Call fso.CopyFile(FileNameTo, True) ‘ファイル削除実行
else
MsgBox “ファイルがありません”
end if
next
MsgBox “削除を完了しました”
Else
MsgBox “キャンセルしました”
End If
Set obj = Nothing
Set fso = Nothing
Set wsh = Nothing
コメントありがとうございます。
>Call fso.CopyFile(FileNameTo, True) ‘ファイル削除実行
この部分ですが、
CopyFile メソッドは、ファイルをコピーするメソッドです。
削除するには、いくつか方法があるのですが、
DeleteFile メソッドなどを使います。
詳細は、FileSystemObject:ファイル・フォルダを削除する(DeleteFile メソッド,DeleteFolder メソッド) で説明しています。よかったら参考にしてみてください。
※ vbs ではエラーになる部分もあるかもしれないので注意してください。
※ファイルシステムオブジェクトに関しては、ファイルシステムオブジェクト(FileSystemObject)の使い方 で説明しています。
また、以下の部分に関して
>\bbb\、\ccc\、\ddd\の中に対象のファイルが一つでもあれば削除して
「対象のファイル」がどういうものかわからなかったのですが、
\bbb\ の場合、b1.txt、b2.txt
\ccc\ の場合、c1.txt、c2.txt
\ddd\ の場合、d1.txt
上記ファイルが存在する場合、そのファイルを削除、それ以外のファイルは削除しない
という形でソースを書いています。
※正規表現に関しては、VBA で正規表現を使う(RegExp オブジェクト) で説明しています。
また、VBA では、Like演算子が使えるのですが、VBSでは使えないようです。