• ベストアンサー

CFからファイルをコピーするプログラムの作り方

マウスで画面上のボタンをワンクリックするだけで、下記の動作を行うプログラムを作成したいのですが、可能でしょうか? もし可能でしたら、作成に役立ちそうな参照URL等を教えていただければと思います。 言語はメジャーなものが好ましく、OSはWindowsXPです。 1.USBポートに挿してあるコンパクトフラッシュ・メモリーカードに保存されている全てのファイルを、別のフォルダにコピーする。 2.コンパクトフラッシュ・メモリーカードに記憶されている保存データを全て削除する。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fifaile
  • ベストアンサー率25% (622/2403)
回答No.2

バッチファイルでいけると思いますよ。 わざわざGUIアプリにする必要はないでしょう。 ドライブが決まっているのなら、 move 元のドライブ\*.* コピー先フォルダ だけで事足ります。 他に何か条件がなければコレで十分です。

mosa1518
質問者

お礼

回答ありがとうございます。 バッチファイル初めて知りました。 便利ですね。バッチファイルで一度作ってみたいと思ってます。 しかし実は、日付等で判定する処理も必要でして、いろいろ試して 見てもバッチで不可だった場合は別の手段を探します。

その他の回答 (5)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.6

コピー元のドライブレターが決まっているなら、 私もANo.2と同じくバッチファイルで十分だと思います。 ただ、moveのワイルドカード指定だとディレクトリは移動されないみたいなので、 xcopyとrmdirを使うのがよいと思います。 Windowsコマンド集:ITpro http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/#9

mosa1518
質問者

お礼

回答ありがとうございます。 バッチファイルで一度作ってみたいと思ってます。 コマンド集ありがとうございます。参考にさせて頂きます。 実は、判定文やファイル抽出処理も入れる必要があり、バッチファイル で処理ができない場合は、別の手段を探そうと考えてます。

noname#58606
noname#58606
回答No.5

一応、大仰な事を書いてしまったので。 VBScriptやWSHって手もあると思いますよ。 経験がないので、きちんとできるかは、分からないのですが。^^; http://www.happy2-island.com/vbs/cafe02/capter00209.shtml

mosa1518
質問者

お礼

追加回答ありがとうございます。 VBScript等、使いこなせたら便利そうですね。 MS-DOSバッチで駄目だった場合は参照URLで いろいろ勉強させて頂こうと思います。

回答No.4

http://www.tohoho-web.com/wwwperl.htm ↑とほほのPerl入門 Perlはご存知CGIやコマンドプロンプトで実行できる言語です。私は一番簡単で入門者には一番いい言語のような気がします。 ちなみにPerlができればPHPもできます(似たもの同士です)。 また、プログラム言語というのはどれも似たようなものでPerlでプログラム言語の概念がわかれば他のCやC++,Java、C#などもわかるとおもいます。ではがんばってください。いかにPerlでのソースを載せておきます。Perlをインストールするには「Perl インストール」などでけんさくするとたくさん情報があります。 #次の2行のディレクトリを変えるだけ $from_dir = 'c:\program1\test'; $to_dir = 'c:\program1\test2'; opendir(DIR, "$from_dir"); @filelist=readdir(DIR); foreach $file(@filelist) { if($file eq ".") { next; } if($file eq "..") {next; } system("move \"$from_dir\\$file\" \"$to_dir\\$file\""); } closedir(DIR); 以上がPerlでのソースとなります。また、他の方がおっしゃるとおり、Windows付属のバッチプログラムやVBScriptでやれば何もインストールせずにできます。 私としてはPerlをやると簡単にプログラム言語を覚えられて一石二鳥だとおもったので紹介しました。もしバッチやVBScriptでやるなら検索すると色々情報があります。 ではがんばってください。

mosa1518
質問者

お礼

回答ありがとうございます。 Perlは一度、HP作成でちょこっと使ったのですが、 ほぼ忘れてしまったので、再度勉強したいです。 今回、MS-DOSのバッチを使うことを考えているのですが、条件判定 が上手く処理できなかった場合は、Perlだと判定文等を 追加するのが私には一番やりやすそうなので、その際は 参考にさせて頂きたいと思います。

  • POTATO_XP
  • ベストアンサー率10% (24/230)
回答No.3

うーん、1クリックがどの場面を想定しているかがイマイチなんですが・・・。 以下イメージでいいですか? 対象となるUSBを挿す。それを検知したPCが任意のアプリを起動。CFのフォルダの構成を解析+任意のフォルダにファイル達を移動。 まず、常駐させる必要がある為、常駐させておく最も単純なアプリとファイル操作をするアプリを切り分けましょう。 常駐するアプリには、 1).USB挿入を検知する。 2).自動コピーの対象となるメディアなのか判断する。 3).対象メディアであれば、コピー用のプロセスを起動する。 1)は・・・難しい・・・。ここがコレの山。Windows上でUSBが挿さった  事を通知するメッセージをトリガにしたいが、この辺は詳しくないで  す。ゴメンナサイ。何か他に良い方法あるかもしれません。 2)これは、対象メディアのドライブ直下に情報ファイルを作っておいて  それが存在するかで判断するのが一番単純。全部のUSBに反応しちゃ  困るので、その対策です。  使用するAPIはFindFirstFile 3)それが見つかればコピー用プロセスを起動  使用するAPIはCreateProcess 切り分ける理由は、全てを常駐さすと、プログラムサイズによっては メモリを無駄に消費するアフォなアプリになるからです。ただ、メッ セージのフックもあまりお勧めしません。作りによってはシステムが 重くなる可能性があります。この辺を一番工夫して脳みそコネコネ考 えてみてください。 次に、コピーツールです。 1).プロセスが生成されると同時に例のメディアのドライブ名を貰う。 2).例のドライブ配下のフォルダ構成を解析し、木構造のデータベースにする。ファイルが存在しなければ終了。 3).そのデータベース元にをツリービューに表示するダイアログ出現。 4).移動するファイルにチェックしOKボタンをクリック(キャンセルで終了) 5).Cドライブのどこかにバックアップ用のディレクトリを構成。 6).バックアップディレクトリ内に日付と時刻をディレクトリ名に用いたサブディレクトリを作成。 7).サブディレクトリ内に選択ファイルを移動。その後、終了。 1).どういう事をすればよいかはCreateProcessを勉強すれば自ずと見えてきます。 2).使うAPIはFindFirstFile、FindNextFileとWIN32_FIND_DATA構造体。ミソは*.*や*です。 3).4).は単なる装飾です興味あれば補足要求してください。 5).6).使うAPIはCreateDirectory 7).使う可能性があるAPIはMoveFile、DeleteFile。2)で作ったデータベースを元にうまいごとやって下さい。 切り分けておけば3).4).の様にイロイロ装飾したとても、常駐時には 影響ありません。また、コピーの作業が短時間で終わらない事を想定 し、5).6).7).は別スレッドで動作させる事が望ましい(Windowを出現 さすなら)。 日付と時刻をディレクトリ名に用いるのにはコピー先の重複を避ける 為の布石です。名前が再度起動した時に重複すると嫌でしょう? 以上です。実際に作ってみてはいませんが、自分ならこう作るなぁと いった感じのアドバイスです。補足要求受け付けます。 以上、参考まで。 ※APIはMSDNで調べてください。すぐ検索に引っ掛ります。 ※VC++、VC#、Boland C++がお勧め。

mosa1518
質問者

お礼

回答ありがとうございます。 説明が不十分でした。申し訳ございません。 常駐が運用上の理由で難しいのでUSBを挿してからアプリを起動するのに1クリック、処理を行なうのに1クリックというのが私のイメージ でした。 いろいろ考慮した結果、まずMS-DOSのバッチで作ってみようと思います。 しかし、コピーするだけといっても、その日の日付でコピー先のフォルダを判定したりする必要があるので、MS-DOSバッチでその様な処理が不可の場合、API等を利用してみようと考えてます。 その際は、再度読み返して参考にさせて頂きたいと思います。

noname#58606
noname#58606
回答No.1

ワンクリックしても、いいのなら、昔ドライブの容量を調べるソフトを作ったことがあるので、それの応用でできるはず。 まず、 aから、zまでループして、あるかどうか判断する。 すげー、原始的。 ld := GetLogicalDrives; for i := 0 to 25 do begin //←この部分  if (ld and (1 shl i)) > 0 then  Memo1.Lines.Add(Char(Ord('A') + i) + ':\'); 配列に入れるなりして、それを。 次ぎに、そのドライブを、ボタンとして表示させる。  まぁ、適応にフォーム作成。 そのボタンを押すと、中身をすべて検索して、移動する。  ファイル・フォルダ移動自体は、どの言語でもできる。 本格的なソフトは、USBをつっこんだ段階で、ソフトを起動して、処理するものもあるけど、まぁ、素人なので、1秒ループで、USBがあったら、処理すれば、ボタンさえ押さなくて、済むかも。 でも、そうなると常駐する必要があるか。 その時は、検索仕切れなかった。 USBは、入れ替えが激しいので、メディアの限定は難しいかな?と思ったけど、「DriveSpec.VolumeSerial:メディアシリアル」で、個別の判定も、なんかできそうだなー。 USB関係のコンポーネントも、いろいろと見つかったし。ほっくほく。 結論として、 【Win32APIが、使える言語なら、どれでもいけるような。】 Delphiは、参考書籍が他のメジャー言語より、少ない点を除けば、難しくはないよ。 Win32APIを使った方が、楽に作れると思うけど、ちとこちらは難しいかも。 でも、そんなに難しくはないよ。 全くの初心者は無理だけど、初級者を抜ければできるはず。 http://homepage1.nifty.com/MADIA/delphi/Win32API/GetDriveType.htm http://mdxonline.dyndns.org/archives/2002/05/delphi_4.shtml http://mdxonline.dyndns.org/archives/old1998/old2002/

mosa1518
質問者

お礼

回答ありがとうございます。 参照URL参考になりました。 常駐は運用規則上、難しいのでUSBを挿してから手動で起動するタイプを目指します。 いろいろ考慮した結果、まずMS-DOSのバッチで作ってみようと思います。 しかし、コピーするだけといっても、その日の日付でコピー先のフォルダを判定したりする必要があるので、MS-DOSバッチでその様な処理が不可の場合、Win32API等を利用してみようと考えてます。

関連するQ&A

  • 画像の取り込みファイルの検索

    ウィンドウズXPで通常と異なる画像の PCへの取り込みを行いました。 その際、ファイルを新規に作成し (仮にファイル名を「A」とします) デジカメのコンパクトフラッシュから USBケーブルを介してPCへ画像を転送したのですが、 そのファイルがどこに保存されたのか わからなくなってしまいました。 その際、コンパクトフラッシュのメモリーは 全てPCに吸い取られたようです。 ファイルを探すのに スタート>検索>キーワード「A」で どこを探してもみつかりません。 探し方がわるいのでしょうか? 教えてください。どうぞよろしくお願いします。

  • CFカードのパーティションを作成するようなソフトはありますか?

    コンパクトフラッシュ CFカードを友人から借りたのですが、アンリツメディアカードリーダーに入れたとこを マイコンピュータが固まりました。友人に聞いたのですがパーティションを削除したらしく、あいにく私はCF用のカメラを持っていないので、フォーマットできません。パソコンではパーティションがないと認識しないのか、CFカードを差し込むと固まります。 WindowsXPを使っているのですが、CFカードのパーティションを作成するようなソフトはありますか? そんな便利なソフトあれば助かります。

  • ファイルのコピーについて

    ウインドウズ98でwors文書を作成、3,5へ保存したものを、別のパソコンのウインドウズXP(ただし3・5挿入口はないのです)に保存する方法がありますか?メモリーフラッシュは98では使えない状態です、メールも98では送信できない設定(ネット不可)です、XPに外づけの3・5用の機械(名前がわからないです)をつけなければダメでしょうか?愚問ですが初心者ですよろしくお願いします。

  • CFメモリーカードの復旧は可能か?

    一眼レフで512Mのコンパクトフラッシュメモリーカードを使っています。これが突然使えなくなりました。 カメラでは「画像がありません」と表示されます。 パソコンでは「このカードはフォーマットされていません」と表示されます。 カードバスアダプターでもUSB接続アダプターでも同じです。 メモリーの中身はほぼ500枚の写真が入っていました。 おそらくメモリーが満杯になったときにあわてて電源を切らずにメモリーカードを引き抜き交換した為にファイルが壊れたものと思います。 壊れた箇所はコントロール部分だと思いますがこのカードを何とかして中身を復元したいのですが方法は無いでしょうか? HDDでは良く復元ツールがありますがメモリーカードでそのようなツールがありますか? どなたか有識者の方にお知恵を拝借したいです。 中身は海外旅行で撮ってきたばかりの写真で非常に大事な物なんで ・・・ ( くすん  泣; )

  • CFをCD-Rに書き込む方法

    実家の父に聞かれたのですが、私には分からないのでどなたか教えて下さい。 父はパソコンを持っておりません。 デジカメはキャノンのIXYを使っていて、プリンターもキャノンのものなので、直接つないでプリントしています。 デジカメを使い始めてから一度もコンパクトフラッシュの中身を消去したことがないので、 そろそろ容量がいっぱいになってきたそうです。 そこで、CD-Rに書き込んでコンパクトフラッシュの中身を消したいそうで、 私のパソコンを使ってその作業をやってくれと頼んできました。 ですが、私はSONYのデジカメとパソコンを使っているので、 メモリーカードをCD-Rに書き込む方法しかできません。 パソコンがなくてもコンパクトフラッシュをCD-Rに書き込む方法はありませんか? 写真屋さんでもやってくれますでしょうか? プリントは必要ないのですが、CD-Rへの書き込みだけなんてお願いできるのでしょうか? もしくは自宅でできる簡単な方法がありますか? 無知でお恥ずかしいのですが、どうぞよろしくお願いします。

  • SDカードですが・・・

    SDカードやコンパクトフラッシュメモリー等で、パソコンデータの保存は可能でしょうか。写真等だけで使うのはもったいないので・・・。 WIN98です。

  • フラッシュメモリーとコンパクトフラッシュはどこが違うんですか?

    SDカードよりフラッシュメモリーのほうがいいと聞いていますが、フラッシュメモリーとコンパクトフラッシュではどっちがいいのですか?

  • SDメモリーカードに書き込み出来ない

    WesternDigitalのWDXF1600JBについている カードリーダーを使用しているのですが、 久々に使用しましたら、メモリーカードを読み込むことは出来ますが 書き込みが禁止されていますと出て、書き込みが出来ません。 使用したのはSDメモリーカードのみで、他のコンパクトフラッシュやメモリースティックは試していません。(持っていません) 色々なSDカードを試してみましたがすべてだめでした。 ロックはもちろん解除してあります。 カードリーダーの方が調子が悪いのでしょうか? もしそうでしたら、どうすれば書き込みが出来るようになりますか? 使用OSはwindowsXP Home Edition Service Pack2です。 初心者なもので、わからず困っています。 どなたか教えてください。よろしくお願いします。

  • コストについて

     デジカメには色々なメモリーカードがありますよね。  コンパクトフラッシュやSDカード、メモリースティックなど。色々なメモリーカードがある中、xDカードがその他のメモリーカードに比べ少々割高に感じます。  どうして、高いのでしょうか?近所の家電店では家電店は、同じ容量でも、xDカードとコンパクトフラッシュでは価格差が2倍近く有ります。

  • プログラムについて

    お世話になります。 Webブラウザを作ろうと思ってるのですがどなたかご教授お願いします。 内容としては  ・マウスのポインタを置いただけでプルダウンメニューが開く  ・また同様の状態でアイコンなどにアニメーション(点滅など)が使える  ・クリックなどの動作で指定した音を鳴らせる 単純に言えばアーティストのHPなどでflashをよく使ってますがあんな感じですね。 質問は はたしてこんなことができるのか? 一番適してる言語(RAD)はなにか? です。 知識不足をお許しください。。。 OSはwindowsXPで「VB」と「VC++」を所有しております。 よろしくお願いいたします。

専門家に質問してみよう