見出し画像

ユーザーフォルダに対する処理は少し特別という話【UWSC】

ユーザーフォルダに対する処理は少し特別という話なのですが、経緯としてはダウンロードフォルダがゴミだらけだったという事象からの記事になります。

ダウンロードフォルダがゴミだらけな理由

純粋に考慮漏れでした。概要としては以下のような処理を稼働時間中に10分おきに繰り返すのですが、

  1. 圧縮ファイルをダウンロードフォルダにダウンロードする。(Chrome の設定を「特定のファイルを必ず開く」という設定にしておく。展開されたフォルダの保存先はデスクトップに指定しておく。)

  2. 中身のファイルを所定のフォルダにコピーする。

  3. デスクトップのフォルダを削除する。

展開されたフォルダは目に見えて邪魔なので処理後に削除していました。ですが圧縮ファイルは、ダウンロードフォルダに残ったままになっていました。

Chrome のアップデートでエラーが発生する。あるいはアップデート自体は成功したはずなのに、エラーの状態に戻るという状態が、約半数の端末に発生し、それにより「特定のファイルを必ず開く」という設定が外れてしまうので、ネットの情報を参考に Program Files >Google フォルダの中のChrome フォルダを削除して入れなおしたのですが、その際にChrome のChromeSetup.exe をダウンロードしたら、ダウンロードフォルダに圧縮ファイルが2万個以上もあったというわけです。

ユーザーフォルダに対する処理

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
folderspec = Shell.NameSpace("shell:Downloads").Self.Path+"\"
print "folderspec:"+folderspec

//特定のディレクトリにある指定の文字列をファイル名に含むファイルを削除する。	
//指定のフォルダの指定の文字列を含むファイルをカウントする。 
//ワイルドカードなどを利用する(*,?)	
n=GETDIR(folderspec,"*.zip")	
	
//カウントしたファイル数を表示する。	
print "n:"+n	
	
//カウントした内容を表示する。
for i = 0 to  (n-1)	
	print GETDIR_FILES[i]  //ファイルの情報は、 GETDIR_FILESの配列の中に格納される。
next	
	
IF n > 0 then	//n > 0 は、1つ以上存在した場合の処理
//---------------------------------------------	
//DOSコマンドで指定のフォルダの指定の文字列を含むファイルを削除する。	
CMDSTR = "del "+folderspec+"*.zip"
print "CMDSTR:"+CMDSTR	
DOSCMD(CMDSTR,FALSE,TRUE)

// ---------------------------------------------	
ENDIF

ユーザーフォルダに対する処理は、見た目のフォルダ名称と指定すべきフォルダ名称が異なったり、ユーザーごとに USERNAME が異なるため、そのことを知らないと対処ができないわけですよね。そのため上記のようなダウンロードフォルダに対して特定ファイル形式を削除する処理のサンプルを作りました。※テスト時にはよく注意して利用してください。デスククトップ("shell:Desktop")、ドキュメント("shell:Personal")、ピクチャ("shell:My Pictures") などに対しても、指定を変更してあげればいいですね。その他については調べてみてください。また、ファイル形式("*.zip")の部分も他の拡張子やワイルドカードなどを組み合わせて利用できますね。

有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします

誰もが無料でWindows自動化を始め、生産性を向上し続けられるようにする」

ここから先は

15字

¥ 100

この記事が気に入ったらサポートをしてみませんか?