会議室の扉の開閉状態を監視~自動スクショされたファイルをリネームするVBS~
2023年09月02日
「会議室の扉の開閉状態を監視するシステムを作った話」の第三弾。
前回、「会議室の扉の開閉状態を監視~更新日時が最新以外のファイルを削除するVBS~」の投稿で、
スクショをNASに保存して最新以外のファイルを消す方法を書いた。
けど、自動でNASに保存するWinshotアプリがファイル名に使用する番号の上限に達すると
停止するという仕様が判明して上手くいかず。。。
今回は、固定ファイル名でスクリーンショットを撮って、それをリネームすることでNASに保存する方法について。
前回、「会議室の扉の開閉状態を監視~更新日時が最新以外のファイルを削除するVBS~」の投稿で、
スクショをNASに保存して最新以外のファイルを消す方法を書いた。
けど、自動でNASに保存するWinshotアプリがファイル名に使用する番号の上限に達すると
停止するという仕様が判明して上手くいかず。。。
今回は、固定ファイル名でスクリーンショットを撮って、それをリネームすることでNASに保存する方法について。
最初に試したのがバッチファイル(ソース②)。
コマンドプロンプトでファイルコピーするのと同様に
copyコマンドでコピー元とコピー先のフルパスを指定するだけ。
さっそく試してみると、スクショした直後にバッチファイルが実行されて
プロンプトのウィンドウが表示される。。。
これはうざい!!
次に考えたのがVBScript(ソース③)でリネームする方法。
NAS上のファイルのリネームはできないようで、コピーしてから元ファイルを削除する。
コピー先にファイルが残って止まらないように
事前に存在チェックしてから消す処理を入れた。
ぱっと見思い通りの動きをしたものの、
コピー先のファイルが閲覧されているとファイルの削除に失敗して
VBScripがエラーを吐く。(on error resume nextを指定しているのに・・・)
エラーウィンドウがどんどん蓄積されて、メモリ不足が発生・・・。
VBScripじゃだめだわ・・・。
じゃあやっぱりバッチファイルで!
Googleでバッチファイルを表示されない方法を検索。
どうやら、バッチファイルに対するショートカットファイルを作成し、
オプションで最小化ウィンドウで起動を選択するだけ。
めっちゃ簡単だった。
ひとまずこれで様子見しているものの、
ファイルを開くとやっぱり止まる。。。
ロバストな方法は何かないものか・・・。
以下ソース。
ソース② リネーム.bat
copy "コピー元フルパス" "コピー先フルパス"
del "コピー元フルパス"
ソース③ リネーム.vbs
on error resume next
'変数を宣言
Dim str_from :str_from = "コピー元フルパス"
Dim str_to :str_to = "コピー先フルパス"
'ファイルシステムオブジェクト作成
Set objFS = CreateObject("Scripting.FileSystemObject")
'コピー先にファイルが存在する場合は、ファイル削除
If objFS.FileExists(str_to) Then objFS.DeleteFile str_to
'ファイルコピー
objFS.CopyFile str_from, str_to, False 'NASでは上書きできないのでFalseにしておく
'コピー元ファイル削除
objFS.DeleteFile str_from
Set objFS = Nothing
PR
Comment