No.6
- 回答日時:
コピー元のドライブレターが決まっているなら、
私もANo.2と同じくバッチファイルで十分だと思います。
ただ、moveのワイルドカード指定だとディレクトリは移動されないみたいなので、
xcopyとrmdirを使うのがよいと思います。
Windowsコマンド集:ITpro
http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/2 …
回答ありがとうございます。
バッチファイルで一度作ってみたいと思ってます。
コマンド集ありがとうございます。参考にさせて頂きます。
実は、判定文やファイル抽出処理も入れる必要があり、バッチファイル
で処理ができない場合は、別の手段を探そうと考えてます。
No.5
- 回答日時:
一応、大仰な事を書いてしまったので。
VBScriptやWSHって手もあると思いますよ。
経験がないので、きちんとできるかは、分からないのですが。^^;
http://www.happy2-island.com/vbs/cafe02/capter00 …
追加回答ありがとうございます。
VBScript等、使いこなせたら便利そうですね。
MS-DOSバッチで駄目だった場合は参照URLで
いろいろ勉強させて頂こうと思います。
No.4
- 回答日時:
↑とほほの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でやるなら検索すると色々情報があります。
ではがんばってください。
回答ありがとうございます。
Perlは一度、HP作成でちょこっと使ったのですが、
ほぼ忘れてしまったので、再度勉強したいです。
今回、MS-DOSのバッチを使うことを考えているのですが、条件判定
が上手く処理できなかった場合は、Perlだと判定文等を
追加するのが私には一番やりやすそうなので、その際は
参考にさせて頂きたいと思います。
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++がお勧め。
回答ありがとうございます。
説明が不十分でした。申し訳ございません。
常駐が運用上の理由で難しいのでUSBを挿してからアプリを起動するのに1クリック、処理を行なうのに1クリックというのが私のイメージ
でした。
いろいろ考慮した結果、まずMS-DOSのバッチで作ってみようと思います。
しかし、コピーするだけといっても、その日の日付でコピー先のフォルダを判定したりする必要があるので、MS-DOSバッチでその様な処理が不可の場合、API等を利用してみようと考えてます。
その際は、再度読み返して参考にさせて頂きたいと思います。
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 …
http://mdxonline.dyndns.org/archives/2002/05/del …
http://mdxonline.dyndns.org/archives/old1998/old …
回答ありがとうございます。
参照URL参考になりました。
常駐は運用規則上、難しいのでUSBを挿してから手動で起動するタイプを目指します。
いろいろ考慮した結果、まずMS-DOSのバッチで作ってみようと思います。
しかし、コピーするだけといっても、その日の日付でコピー先のフォルダを判定したりする必要があるので、MS-DOSバッチでその様な処理が不可の場合、Win32API等を利用してみようと考えてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
LAN接続HDD(LinkStation)で削...
-
Vba初心者です。下記のコード助...
-
エクセル2010、図が大きすぎま...
-
frxファイルの役目
-
同じファイル名 上書きしないフ...
-
xcopyでのバッチコピー方法でコ...
-
エクセルのハイパーリンクがコ...
-
ワードへのハイパーリンク貼り...
-
VBSで作成したフォルダにファイ...
-
vbsでExcelのシートをコピーす...
-
[エクセル]コピーするとオブジ...
-
FTPとファイルコピーの違いにつ...
-
バッチファイル 別ファイルにリ...
-
VPN経由でExcelを開くのが遅い
-
ファイルサーバ上のファイルが...
-
UNCパスでファイルをコピーしたい
-
バッチファイルのコピーで
-
ライセンスファイルの保存場所
-
アクセス クエリを別のファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
frxファイルの役目
-
バッチファイル XCOPYで上書き...
-
エクセルのハイパーリンクがコ...
-
同じファイル名 上書きしないフ...
-
Vba初心者です。下記のコード助...
-
xcopyでのバッチコピー方法でコ...
-
エクセル2010、図が大きすぎま...
-
バッチファイル 別ファイルにリ...
-
vbsでExcelのシートをコピーす...
-
アクセス クエリを別のファイ...
-
[エクセル]コピーするとオブジ...
-
パワポでスライドをコピーでき...
-
bat 同名ファイルコピー時にリ...
-
エクセルVBAで開いているファイ...
-
FTPとファイルコピーの違いにつ...
-
ファイルサーバ上のファイルが...
-
ファイルをコピーできない
-
開いている別のファイルにExcel...
-
FSO.CopyFileでのエラー無視方法
おすすめ情報