ブラウザ上に設置したボタンclickでVBScriptを使ってファイルコピーをしようとしています。


最終的にはサーバ上の所定のフォルダ(\\servername\d\test\sample.xls)から
操作している端末(\\端末名\d\test)へとコピーするようにしようとしていますが
とりあえず下記のように単純な例から動作確認を行っています。
ですがどうしても「指定されたファイルが見つかりません」のエラーが出てしまいます。

下記のpath0(コピー元)とpath1(コピー先)の書き方をいろいろ変えて
(例えばサーバフルパスからサーバフルパスへコピーとか、
 端末名含むフルパスから端末名含むフルパスへコピーとか
 ドライブ名から始めるとか)
それに合わせてファイルやフォルダを配置してテストしてみてますが、
すべて「指定されたファイルが見つかりません」となります。

何かパス指定に問題があるのでしょうか。ご教示願います。


path0 = "\\端末名\d\test0\sample.xls"
path1 = "\\端末名\d\test1"

Set objWS = CreateObject("WScript.Shell")

cmd = "copy " & path0 & " " & path1
msgbox cmd '確認用

objWS.run(cmd)

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/23 09:46:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ku__ra__ge No.3

回答回数118ベストアンサー獲得回数40

ポイント34pt

ローカルのファイルを扱う場合はid:TransFreeBSDさんの方法で問題ないと思いますが、コマンドプロンプトは基本的に"\\端末名\d\test"書式のパスをサポートしていないためネットワーク上のファイルコピーには向いていません。
特にcopyコマンドにこだわる理由がないのであれば、FileSystemObjectを利用するとよいかと思います。

<html>
<head>
<script language="VBScript">
<!--
path0 = "\\端末名\d\test0\sample.xls"
path1 = "\\端末名\d\test1"

Sub RunCopy()
	Set fso = CreateObject("Scripting.FileSystemObject")
	Call fso.CopyFile(path0, path1, True)
	MsgBox "success."
End Sub
-->
</script>
</head>
<body>
<input type="button" value="copy" onclick="RunCopy()">
</body>
</html>

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント33pt

そのパスが 有効じゃないということでしょう。

パスを ローカル内だけで 設定して 実行できるか確認してみたらいいですね。

というか ブラウザから実行じゃなく、単独に実行させても ダメなんですか?

id:taknt

もしかしたらサーバー内の実行をしてるのかなーー?

2013/01/22 18:19:47
id:kon39392

ためしにローカルにvbsファイルを作って、上記を記述し、

 path0="d:\test1\sample.xls"

 path1="d:\test2"

などとして実行しても「指定されたファイルが見つかりません」となります。

自分でも「間違っているとしたらパスの指定方法くらいだろうな」と思い、いろいろ試しつつ考えられる可能性をつぶし、それでもわからなかったので質問させていただいております。

もしパス指定が間違ってないとして、例えばAdministrator権限の問題とかもあるのでしょうか。

id:TransFreeBSD No.2

回答回数668ベストアンサー獲得回数268

ポイント33pt

copyコマンドはcmd.exeの内部コマンドのため直接実行できません。

cmd = "cmd /C copy " & path0 & " " & path1

このようにcmd.exeから実行してください。
このとき/Cスイッチでなく/Kスイッチを用いるとコマンドプロンプトが閉じませんのでデバッグに便利です。

id:ku__ra__ge No.3

回答回数118ベストアンサー獲得回数40ここでベストアンサー

ポイント34pt

ローカルのファイルを扱う場合はid:TransFreeBSDさんの方法で問題ないと思いますが、コマンドプロンプトは基本的に"\\端末名\d\test"書式のパスをサポートしていないためネットワーク上のファイルコピーには向いていません。
特にcopyコマンドにこだわる理由がないのであれば、FileSystemObjectを利用するとよいかと思います。

<html>
<head>
<script language="VBScript">
<!--
path0 = "\\端末名\d\test0\sample.xls"
path1 = "\\端末名\d\test1"

Sub RunCopy()
	Set fso = CreateObject("Scripting.FileSystemObject")
	Call fso.CopyFile(path0, path1, True)
	MsgBox "success."
End Sub
-->
</script>
</head>
<body>
<input type="button" value="copy" onclick="RunCopy()">
</body>
</html>
id:kon39392

ご回答ありがとうございます。

ku__ra__ge様にご提案頂いたCopyFileを使用した方法で

サーバ上から端末へのファイルコピーが実現できました。

ちなみにコピー先のパス指定は

path1 = "\\端末名\d\test1"

の末尾に\まで指定する必要がありました。

もしかして末尾の\まで指定するとcopyも動いたのかなと思い

copyの方も改めて試しましたが、やはり「指定されたファイルが..」でした。

とりいそぎやりたいことが実現できたので解決です。

皆様ありがとうございました。

  • id:TransFreeBSD
    確認したのはXp機なのですが、copy, del, dir等、基本的なコマンドはUNC (\\computer\folder) 形式にも対応してました。
    環境依存があるんですかね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません