質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

2218閲覧

アプリケーションの更新日のタイムスタンプを取得したい。

moshi

総合スコア90

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/11/14 02:27

前提・実現したいこと

VBScriptでアプリケーションに紐づく情報を取得してファイルに出力したいです。

試したこと

VBScriptでアプリケーションのバージョン情報を取得したい
を参考に紐づく情報を取得しようとしたところ
GetDetailsOfメソッドが有効そうだったので、この第2引数に3を指定すれば更新日の情報が取得できるのではないかと以下を試しました。

ption Explicit Dim OutputFileBase, fso, OutputFile ' ファイル名の取得 OutputFileBase = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, ".")) Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set OutputFile = fso.OpenTextFile(OutputFileBase & "txt", 2, True) Const ColumnNo1 = 1 Const ColumnNo2 = 2 Const ColumnNo3 = 3 Const ColumnNo4 = 4 Dim itm 'As Shell32.FolderItem For Each itm In shellFolder.Items() Dim ver1,ver2,ver3,ver4 'As String ver1 = shellFolder.GetDetailsOf(itm, ColumnNo1) ver2 = shellFolder.GetDetailsOf(itm, ColumnNo2) ver3 = shellFolder.GetDetailsOf(itm, ColumnNo3) ver4 = shellFolder.GetDetailsOf(itm, ColumnNo4) OutputFile.WriteLine(itm.Name) OutputFile.WriteLine(ver) OutputFile.WriteLine(ver1) OutputFile.WriteLine(ver2) OutputFile.WriteLine(ver3) OutputFile.WriteLine(ver4) OutputFile.WriteLine() If False Then 'バージョン(ColumnNo)の番号確認用 Dim buf 'As String Dim i 'As Long For i = 1 To 1000 '適当 buf = shellFolder.GetDetailsOf(itm, i) If buf <> "" Then OutputFile.WriteLine(i) OutputFile.WriteLine(buf) Next 'i Exit For End If Next 'itm

発生している問題・エラーメッセージ

このまま実行すると、OutputFile.WriteLine(ver2)のところで

プロシージャの呼び出し、または引数が不正です。

というエラーメッセージが出力されてしまいます。

試しにこの1行をコメントアウトして実行すると
上から
・名前(これはOutputFile.WriteLine(itm.Name)で出力しています。)
・アプリの制作元?
・サイズ
・バージョン情報
が表示されました。

なぜGetDetailsOfメソッドに書いてあることと違うことが出力されるのかはわかりませんが
おそらく2を指定したところでタイムスタンプが本来なら出力されるのではないかと思っています。

どなたかこのエラーの理由がわかる方、及びエラーを解消するすべがわかる方はおしえてください。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

Windows
VBScript

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(質問のコードはそのままだと動かないのですが……)

エラーの理由

出力結果にShift_JISで表現出来ない文字(U+200E)が含まれるため。

エラーの解消

fso.OpenTextFile()の第4引数にTristateTrue(数字で言うと-1、Trueでも可)を指定してUnicodeで出力させるようにする。


以下補足。

おそらく2を指定したところでタイムスタンプが本来なら出力されるのではないかと思っています。

前回の質問の私の回答の以下の部分を動くようにするとわかる思いますが、2でタイムスタンプらしきものが出力されるという予想は正しいです。

vbscript

1 'バージョン(VersionColumnNo)の番号確認用 2 Dim buf 'As String 3 Dim i 'As Long 4 For i = 1 To 1000 '適当 5 buf = shellFolder.GetDetailsOf(itm, i) 6 If buf <> "" Then WSH.Echo i, buf 7 Next 'i 8 Exit For

また、VBScript単体ではデバッグが難しいため、MS Officeを使えるのならVBAのエディタなども併用することをお勧めします(前回の私の回答も、VBAで動くことを確認し、VBScript用に細部調整、という流れで作っています)。

投稿2018/11/14 12:19

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moshi

2018/11/15 00:48

回答ありがとうございます。エラーの理由から解決方法まで丁寧に説明してくださったおかげで解消されました!質問内容に対してはベストアンサーにさせていただきますが1点質問があります。 出力はできたのですが、現在表示されたものは「‎2018/‎11/‎12」のように時間の情報が入りませんでした。この関数では日付までしか取得ができないですか? VBAエディタのことを調べました。こんなものがあったのですね、知りませんでした。ありがとうございます。
imihito

2018/11/15 14:19

`GetDetailsOf`の返り値の型が文字列である以上、表示されている以上の情報はわからないですね。 他の手段としてWMIも試しましたが、速度の割に情報量はそこまで変わらない感じでした。 それ以外の方法としては、レジストリを調べる・`GetDetailsOf`で保存先らしきものが取得できるのでその中の古いファイル・フォルダを探す、などでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問