忍者ブログ

会議室の扉の開閉状態を監視~自動スクショされたファイルをリネームするVBS~

2023年09月02日
会議室の扉の開閉状態を監視するシステムを作った話」の第三弾。

前回、「会議室の扉の開閉状態を監視~更新日時が最新以外のファイルを削除する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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字