• 締切済み

ファイルをコピーするvbs

ファイルをコピーするvbsってどう書けばよいのでしょうか? このvbsを実行すると、その後貼り付けでファイルがペーストされるように、クリップボードにファイル自身をコピーしておきたいです。 出来れば.NET不要でvbsファイルのみで実現出来るとありがたいです。

みんなの回答

回答No.2

No1さんが勘違いしていなかぎり、私も用途について不思議な用途になると思います。なのでファイルの中身の話になるのでしょう。 GUIでは >されないので、「クリップボードにファイル自身をコピー」という表現にしています と言う操作は、ありえるし、良く使っています。しかし、それを自動化するスクリプトで、なぜコピーバッファーに入れて止めておかないといけない? 意味不明ですよね。 もし、例えばタイマーのように、他のスクリプトを走らせ、必要な時に呼びだす。なんて考えているなら、No1と同じように、考えが甘いです。つまり、プロセス間通信とも言うべき行為を、素人はたいてい、コピーバッファーを使えば、達成できると最初は思うものです。1/100秒レベルの単位なら可能であり、ほぼ失敗がありませんが、データーは保障されませんので、消えてもたどる、復活させる事ができない。 スクリプトレベルのプロセス間通信では、ファイルI/Oを使うか、.NETなどCOM化されたWindowsAPIなど(WMIを含めて)、それらにアクセスして、提供される(winsockのような)APIを使うことです。 私の場合は環境変数又は、WMIの非同期も使ってみました。WMIの非同期(又は同期)&終了コードはとてもうまくゆきましけど。 で、本題ですが、 >エクスプローラのコピーと同じ動 であれば、それを模試すればいいだけのこと。 http://www.geocities.jp/maru3128/ShellObject.html http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shellfol.htm (本当は、MSのテクニカル リファレンスページをみてください) などにでてくるように、右クリックメニューを試行してください。私も、これを使ってゴミ箱のクリアーを作っています。 やるとわかるが、リファレンスにはないことをしなとできない場合が多いです。例えば、メニューに出てくる名前がだが、Indexを指定する方法と、名前を指定する方法が在る。当然どちらも一長一短があり、使い分ける必要がある。日本でだめなら、英語指定で動作する事が多い。このマトリックスはUSAサイトに多い(日本語OSなのに英語指定で動作する?????)。 Indexはお分かりですよね。上からの順番なので、必ずしもその位置に目的の物があるわけではない。そのマシンに限り、使用できる。汎用性をもたせるには、名前指定しかない。しかしね、日本語で指定すると動作しない場合が・・・ (スペースとか全角半角、特殊文字の問題) 例: WSF <object id="Shell" progid="Shell.Application" /> var Recycle = Shell.NameSpace(10); var re = Shell.ShellExecute(Recycle.self.Path,"","y","Empty", 1); OSのバージョンによって多少動作が違う。上記はJS(var を取って終端記号をはずす)で当然VBSでも可能。何しているかわかるよね。上記は、そのままではうまく動作しない。なぜ? 試して動作を把握しよう。 WScript.Sleep(2000);を入れるとうまくゆく。さて、どこでしょう。 まあがんばって。たくさん試行錯誤してください。 本家 http://msdn.microsoft.com/en-us/library/bb773938(VS.85).aspx http://msdn.microsoft.com/en-us/library/bb774094(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/gg537745(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/bb774085(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/cc144101(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/bb776886(v=VS.85).aspx 通常、右クリックメニューは http://msdn.microsoft.com/en-us/library/bb787810(v=VS.85).aspx にあるInvokeVerb です。これで値を取得したり、実行したりしますが、すでに分かっているものならShell.Excuで十分です あと、コピーバッファーは、HTAを使い、HTMLオブジェクトで指定する方法があります。 上記サイトも古いので、新しいサイトで仕様を確認してください 最後に >、クリップボードにファイル自身をコピーしておきたいです。 このような操作で格納先を汎用語として「コピーバッファ」となります。「クリップボード」はアプリの名前なので一応。この2つを=で結んで使われることが多いが、「クリップボードを使いコピーバッファーに入れる」なんて使い方をします。

oshietezou
質問者

お礼

回答ありがとうございました。 そのものズバリの質問にして再度投稿する予定です。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>ファイルをコピーするvbsってどう書けばよいのでしょうか 質問が舌足らずでは。ファイルのコピーというと同じものを別に1つ作るということで、VBSでもファイルのコピーは在る。 Googleでも照会してみること。 -- 質問者が言いたいのは、既にデータがある別のファイルの後に追加的にデータを作りたい(まとめたいのでは? APPEND的意味で。 http://www.red.oit-net.jp/tatsuya/vb/Open.htm ーー テキストファイルなどなら簡単だが。 ーー コピー元のファイルの中身はどういうものか?書いてないのは楽問題点をつかめておらず、VBSの問題にしているのは、楽観的に過ぎるのでは。 APPEND的なことなら、ファイルの終わりという情報を取り除かないとならないが、そのソフトを使わず、VBSなどファイルレベルで扱うものでは、そう簡単ではないとおもう。コピー元、コピー先共に読んでーー>コピー先の最後に追加ー続けて追加ー・・・ー>CLOSEが必要と思うが、それらはそのファイルのVBAのようなもの(または直にそれを満たすソフト)が必要だろう。

oshietezou
質問者

お礼

回答ありがとうございました。 そのものズバリの質問にして再度投稿する予定です。

oshietezou
質問者

補足

エクスプローラのコピーと同じ動作をすることを想定しています。 貼り付けない限りは複製が作成されないので、「クリップボードにファイル自身をコピー」という表現にしています。 ですのでコピー対象ファイルは情報として必要ないと思ったのですが、お答えすると、jar、warファイルをこのvbsでコピーする予定です。 ググって4サンプルくらい作って動かしたのですが、.NETやらなんやらでうまく動きませんでした。