- PR -

自動的にファイルを切り取って移動させるプログラムをつくりたいです。

投稿者投稿内容
ピヨピヨ
会議室デビュー日: 2004/04/13
投稿数: 8
投稿日時: 2005-05-11 13:01
こんにちは。アドバイスを頂けたらと思います。
筋違いの内容のスレッドをここに立てていれば申し訳ありませんがご容赦ください。 
   
【お伺いしたい内容】
Windows2000上にあるファイルを一定時刻がくると(あるいは時間が経つと)指定したファイルが自動的に切り取られて別の指定した場所に貼り付けるプログラムを作成したいです。どの開発言語だとできますでしょうか。
   
【詳細】
別ソフトのログファイルとして更新されるAccessのデータファイルがあります。サンプリングタイムは30分ですが、放っておくとデータが上書きされずにひたすら次の行に書き込まれるためファイルの容量が膨大になります。分割するために、一定期間が経つとそのファイルを切り取って別の場所に名前を変えて貼り付るプログラムを作成したいと思っています。切り取られた後はその別ソフトでファイル名は変更されずに自動的にファイルが作成されます。

AccessVBA等の本を読んでみたもののピンポイントで参考になる本に巡り合えず、ヒントとなる情報が全く手元にございません。私自信は多少C言語を習った程度ですが、せめて要求を満たす開発言語とキーワードがわかれば学んでいきますので、ご存知の方がいらっしゃいましたら教えていただけないでしょうか。よろしくお願い申し上げます。 
_________________
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-05-11 13:29
こんにちは。

一番楽だと思われる方法は、MOVEコマンドを実行するバッチファイルを作成し、タスクに登録することでしょうか。

メモ帳等で新規テキストを作成し、次のようなコマンドを記述します。
MOVE 移動したいファイルのパス 移動先のパス
例:
MOVE C:\work\abc.dat c:\work\backup\

このファイルを、拡張子を.batにして保存します。(ABC.BAT等)

それから、[アクセサリ][システムツール]に入っているタスクを利用して、実行するファイルに上記バッチファイルを指定し、実行したい日(毎日とか毎週とか)を指定しておけば、あとは自動でやってくれるでしょう。

これなら特別なプログラムは必要ないです。
会議室デビュー日: 2005/05/07
投稿数: 13
お住まい・勤務地: 北海道はでっかいどう
投稿日時: 2005-05-11 13:36
Windows2000上と限定されるのなら、
VBScript(Windows Script Host)を利用してもよいかもしれないですね。
多少凝ったこともできますし。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-05-11 13:36
引用:

noderaさんの書き込み (2005-05-11 13:29) より:
これなら特別なプログラムは必要ないです。


一応注意点を挙げるとするなら、Accessに書き込んでいるときや読み込んでいる最中に移動しようとしてエラーになるかもしれない、あるいは開いたままならそもそも移動できないかもしれない、等々。
# まあ、1日に1回夜中、とかなら問題ないでしょうけど。

あ、注意点というのは、別にタスクとbatを使う方法に限った話ではないです。
hisoka
常連さん
会議室デビュー日: 2004/11/30
投稿数: 25
お住まい・勤務地: 関西
投稿日時: 2005-05-11 14:10
noderaさんの追記です。

バッチファイルを
for /F "tokens=1-3 delims=/ " %%a in ('date /t') do move c:\ファイル名.txt c:\log\%%a%%b%%c.txt

のようにして1時間毎に「タスク」で起動してやれば多分20051200.txtのように年月日のファイル名で移動されていくと思います。
古いログが不要ならばこの方法は不要ですが・・・
hisoka
常連さん
会議室デビュー日: 2004/11/30
投稿数: 25
お住まい・勤務地: 関西
投稿日時: 2005-05-11 14:22
引用:

のようにして1時間毎に「タスク」で起動してやれば多分20051200.txtのように年月日のファイル名で移動されていくと思います。
古いログが不要ならばこの方法は不要ですが・・・



すみません。1時間毎ではなく1日毎です。工夫すれば1時間後とでもできるかと・・・
中途半端ですみません。
ピヨピヨ
会議室デビュー日: 2004/04/13
投稿数: 8
投稿日時: 2005-05-11 22:16
お礼を申し上げるのが遅れました。
皆様、早速のご返答感謝いたします。ありがとうございます。
図書館に行って開発言語の本を流し読みしましたが結局有効な手段が見つかりません
でした。途方にくれていましたが皆様の助言に驚くばかりです。

【お礼】 
nodera殿
早速試してみましたところ、うまくいきました。感動しました。MOVEコマンドで
別ファイル名で保存できるのかも試してみます。ありがとうございます。
 
黛殿
VBScriptなら同じ機能ができるということですね。せっかくですので、
VBScriptの本を探して仰っていただいたことにチャレンジしてみます。
ありがとうございます。

なちゃ殿
注意点をご指摘していただきありがとうございます。ただ動けばいいというわけでは
なく、通常時以外の際にはどう対処するのかということですね。意図的にタイミングを
合わせてみて実験してみます。 
 
hisoka殿
詳細な方法を記載していただきありがとうございます。forはループ文の意味合いで
しょうか。for文以下の意味を調べるとともに、他にどのようなことができるのか応用を知りたいと思います。なお、古いログも必要ですのでこの方法は必要です。

【再度お伺いしてもよろしいでしょうか?】    
さて、私の書き方が貧弱だったこと、及びbatファイルについては本当に思いも
しなかった方法したので、差し支えなければご指導いただければと思います。 
   
他の機能も考えていますのでプログラミングでチャレンジしたいと思います。
黛殿が仰ったようにVBScriptで作成するとなると下記「他の機能」も実現できます
でしょうか。OSはWindows2000pro限定です。
(調べた限りではVBScriptはVBをHTMLに埋め込む言語みたいです。
VBの機能の一部でしょうか?)
 
私が開発言語にこだわっているように思われるかもしれませんが、
実は開発言語とキーワードを元にこの機能を作成して、他の機能を統合するつもりで
いました。「他の機能」を申し上げますと移動した後のAccessファイルから必要な情報を取り出しエクセルファイルに書き出す予定でいます。必要な情報のみ抽出しファイルの容量を軽くするためです。csvやtxtファイルから数値を読み出し、別ファイルに
書き出す作業ならC言語ですぐできるのですが、「Accessのデータベースの特定の
テーブルから特定のデータを選び」、エクセルファイルに書き込む機能を作りたい
です。しかし、残念ながらこの機能の実現可否すらわかっておりません。
VBの本を読みましても別ソフトのファイル(ここではAccessのファイル)の操作に
ついては記載されていません。せめて実現可否のキーワードがあれば、調べることが
できますがご存知でいらっしゃいませんでしょうか。
      
まずはファイルの移動が大事なのでbatファイルを利用致します。
"batファイル"という方法はシンプルでとてもいいです。
ピヨピヨ
会議室デビュー日: 2004/04/13
投稿数: 8
投稿日時: 2005-05-12 09:14
実行結果を記載致します。
  
まず、nodera殿から教えていただいたMOVEコマンドについてです。
@移動先に別ファイル名で保存できました。
A同じドライブ内だけでなくネットワークのフォルダへ保存もできました。
B保存先のディレクトリ名が漢字でも保存できました。
 
hisoka殿から教えていただいたコマンドですが、仰ったとおり
20050512.mdbと日時を名前にして保存ができました。
  
私自身batファイルや、コマンドの内容をよく知らなかったので調べました。
キーワードは「コマンドプロンプト」「バッチファイル」「バッチファイルコマンド」
等です。スタート⇒プログラム⇒アクセサリ⇒コマンド プロンプトを選び、
help MOVE や help for を入力するとコマンドの使い方・意味合いを参照できました。
  
なちゃ殿から教えていただいた内容ですが、検証用のPCがないので未だ実験していませんが、
行う予定でいます。また、黛殿から助言をいただいたとおり、VBScriptでプログラミングを
していきたいと思います。 

スキルアップ/キャリアアップ(JOB@IT)