社会不安障害:SAD、ボランティアとセカンドライフ

SADで会社を休職したが、一年で復帰し、無事定年を務めて、その後の生活とボランティアについて気ままに掲載中

指定フォルダーのファイル・フォルダーの削除(DOSのバッチファイル)

2009-08-22 11:57:55 | ITについて

新業務基幹システムの落とし穴その4で掲載したが、事前に何の相談もなく、しかもメールで本来の仕事ではないヘルプと言うか依頼が来た(勝手に発信されていた)。仕方がないが、対応できる者が出向先の会社にはいそうにない為、私の方で片付ける事にした。しかし出来るだけ手間をかける気がなかった為、前回掲載した様に、元IT担当者にVBA(WSH)のプログラムを送ってもらい、そのプログラムを修正して使う事で、簡単に済ませる事にしていた。

その送ってもらったVBAのプログラムであるが、みた瞬間ある危惧をすぐ抱いたが、やはり現実の物となってしまった。つまり求める機能を満足しないと言うか、元IT担当の環境では動いたのかも知れないが、結果当社の環境では動かず、思った以上の手間をかける事となった。

新業務基幹システムの落とし穴その4でも掲載したが、要はやりたい事は

「ファイルサーバーの特定のフォルダーの中のファイルやフォルダーを定期的に自動で削除したい」に尽きる。

つまり、元部署でも同じ処理をしていたが、複合機から、ファイルサーバーに書類をスキャンするが、そのままほっとかれた書類(PDFファイル)が、山となって残り、しかもフォルダー等もつくり個人的な使用場所になっている。しかも何回警告しても、改善されない。流石に痺れを切らした担当課長が、上記の処理をできる様にして欲しいとの依頼だった。もともとは定期的とは、一週間毎とか2日毎とか考えていたらしいが、私の方から毎日削除する提案をした。親会社では、実際そうしているし、その方が区切りが良いからでもあった。

出向先の会社の方を含めて、今だ私の本来の仕事を理解していないでも掲載し、未だにヘルプがかかるのは仕方がないが、偶然的な飲み会でも掲載した様に新業務基幹システムが稼動し始めた事で、私の仕事自体が出荷業務(注文書発行の処理)をしている為、これに時間がかかりすぎている。新システムの自動実行プログラムその1まで考えている中で、本来の仕事以外が回ってくるのは、頭にくる(いたたまれなくなる)が、これも仕方がないと、殆ど諦め状態でもあるが、一方でヘルプがかかるのも適度であれば、ありがたい事なのだろう。

出向先の会社で、出向している立場としては、本当は複雑な関係になりがちな人間関係の中で、ヘルプを求められる事はある意味で言えば、嬉しい事なのだろう。先日の管理職の会議を欠席した事で、負い目もあるが、その会議で私の名前が上っていたらしい。また本来の仕事とは違うヘルプが増えるみたいであるが、これはまた別の記事で投稿する。

さて、上記の依頼に対する答えを出さなければならず、本来の業務の仕事の合間をぬって、数日ネットで検索して、その対処を考えたが、当初考えた以上の時間を擁した。しかし結果としては、新しい発見をする事ができ、これはこれで感動ものかもしれない落ちとなりそうである。最もこの手の話題(IT)に興味のある人にとっての話題だが・・・。

今回の依頼の解決策を簡単にまとめると

  1. 上記の様に指定のフォルダー内のファイルとフォルダーを全て削除するプログラムの実現(WSHやDOSコマンドのバッチファイル等)
     
  2. 上記のプログラムをタスクスケジューラで週毎や毎日一回等の条件を設定する -> これはサーバー(OS)側の機能を使えば簡単に設定できる。

と言う事で、問題は上記1のフォルダー内のフォルダーを削除する事が、元IT担当者のVBA(WSH)でも正常に削除されない事から、時間がかかる事になった。

結果として、Okwaveでほぼ同じ様な質問があり、その回答として、下記のDOSのバッチファイルが紹介されていた。

Okwaveでpita-gora pita-gora氏が回答していたバッチプログラム 私が変更したプログラム 最も対した変更ではない
echo off
pushd D:TEST
del /q *.* for /D %%f in ( * ) do rmdir /s /q "%%f"

echo off
pushd D:TEST
del /q *.* for /D %%f in (*) do (
 rmdir /s /q %%f
)

このプログラムが動けば、簡単に処理できると考え、試したが、結果は異常な処理となった。つまり指定のフォルダー(上記では:¥TEST)になぜか?カレントディレクトリーが移動せず、バッチファイル直下のファイルが全て削除され、もちろんD:¥TESTの中のファイルやフォルダーも削除できなかった。

日を改めて、じゅっくり検証したいとは思っているが、結果上記のように、最後の行の変数のダブルクオーテーションをはずして実行させたら、無事実行出来る事を確認した。一行をわざわざ分けたのは、趣味の問題であるが、このダブル クオーテーションは本来、フォルダー名に空白文字が含んでいるのを考慮して付けた処理だと思うが、これでなぜうまく行かなかったのかは分からない(Windows XP SP2)し、深く追求する時間もない為、その内に暇となった時(おそらく定年退職)にでも検討してみたいと思っている。

所で、上記ヘルプにより、紹介したようなDOSのバッチプログラムを久しぶりに見たが、上記のOkwaveで答えられている方のノウハウは凄く、且つ芸術的でもあると感じた(本来は完璧に動いてくれるはずだったが・・・)。

私自身が何年も殆どDOSのコマンドと言うかバッチファイルを作る事がなかった事もあるが、今回の処理で、上記の回答者(pita-gora pita-gora)の方を全く尊敬する。氏のバッチファイルが余りにもシンプルであり芸術的な所を、あえて解釈すると

  1. パスを変更する場合にCDコマンド(チェンジディレクトリー)を使うが、これだとドライブ名をまたがる、パス変更ができない。ところが、本来の目的ではないが、pushdコマンドでは、これが1コマンドで達成する事ができる。
      
  2. rmdirコマンドだけでは、不特定多数のフォルダーを消す事が出来ない。更に指定のフォルダーまで削除される。勿論ワイルドカードを使用する事はできない。これを上記のforループでいとも簡単にrmdirコマンドでワイルドカードが使える様にしてある事はむしろ芸術である。

 DOSコマンドの命令は通常、一行に記載されているが、あえて、上記のように()でくくり、do以降のコマンドを分離する事を私のバッチファイルでは試しているが、これはあえてこのような事もできる事を試しただけに過ぎない。

なぜ、上記の回答者(pita-gora pita-gora)の方を絶賛したかと言うと、元IT担当者も言っていたが、上記の様な質問に対する答えの多くは、rmdir /sコマンドでそのフォルダー毎消して、mkdirコマンドで再度フォルダーを作成すると言うものであり(この場合、mkdirコマンドでフォルダーを再作成した時のセキュリティ設定が面倒)、質問者の意図に答えた物を見つける事が出来なかったからである。つまり唯一?上記の方が答えたバッチプログラムをネットで見つけた時には、感激した。このプログラムに関して、元IT担当者とも話したが、なかなかDOSコマンドもまだ捨てがたい物があるとツクヅク感心した。

さて次はフリーソフトUWSCを使っての新業務基幹システムの自動実行プログラムの作成であるが、こちらははるかに時間がかかりそうである。当たり前だが・・・。


最新の画像もっと見る

コメントを投稿