VBスクリプトでDOSのXCOPYコマンドでTXTファイルにあるリストのコピーをするべく
下記のようにしてみたのですが、うまくいきません。
皆様方にご教示いただきたいです。
'bk.vbs
'変数定義
sp = chr(32) '半角スペース
dq = chr(34) '”記号
en = chr(92) '\記号
dest = "F:\Backup" 'バックアップ先の親フォルダー
dt = replace(Data,"/","") '現在の年月日
'ファイルシステムオブジェクトを作成
Set FS = CreateObject("Scripting.FileSystemObject")
'シェルオブジェクトを作成
Set WS = CreateObject("WScript.Shell")
'リストファイルが存在しなければ終了
If Not FS.FileExists("F:\list.txt")Then
MsgBox("バックアップリストファイルがありません。")
WScript.Quit
End If
'リストファイルを開く
Set Txt=FS.OpenTextFile("F:\list.txt")
'リストファイルの内容を1行ずつ読み込んで処理
Do Until Txt.AtEndOfStream 'ファイルの末尾まで繰り返す
u = Txt.ReadLine '1行読み込む
'コピー元パスを"でくくる
srcpath = dq & u & dq
'コピー先パスの文字列を生成
dstpath = dest & en & dt 'F:\Backup\年月日
dstpath = dstpath & en & Left(u,1) 'F:\Backup\年月日\ドライブ
dstpath = dstpath & Mid(u,3) & en 'F:\Backup\年月日\ドライブ\パス\
dstpath = dq & dstpath & dq 'コピー先パスを"でくくる
'「xcopy/e/y/dコピー元パスコピー先パス」を実行
WS.Run"xcopy/e/y/d"&sp&srcpath&sp&dstpath
Loop
Txt.Close 'ファイルを閉じる
'終了メッセージ表示
MsgBox("すべてのバックアップが終了しました。")
dt = replace(Data,"/","") '現在の年月日
いきなり出てくる、 Data ? -> Date ?
すいません。たぶん誤爆
どの行でなにがどうエラーでるかくらい書きませう
うまくいきませんでは何も伝わらない
解答者に対して不親切ではありませぬか?
皆様、ご迷惑をお掛けし申し訳ありません。
「出掛けに一筆」様よりいただきましたご指摘は、
私の単なる打ち間違いです。「Data」は誤りでした。
エラーの内容ですが、
行:39
文字:2
エラー:指定されたファイルが見つかりません
コード:80070002
ソース:(null)
という表示がされております。
私の表現があまりにも足りず、ご迷惑をお掛けし、深くお詫び申し上げます。
それと、参照している(はずの)TXTファイルにはバックアップするファルダの
フルパスが1行のみ記述してあります。
管理人様へ
私の責めにより、貴重なスペースを無駄に使用しているとしましたら、
誠に恐縮ですが、削除をお願いします。
なにぶん勉強不足な身で、安易に質問したことを心よりお詫び申し上げます。
デバッグをもっとしっかりやりゃぁいいんじゃねぇの?
コピー元のファイルが存在しないんでしょ?
コピー元ファイルに何を設定するか毎回表示するようにして
本当にそのパスであってるか確認すれば解決するような気もしますが・・・
それくらいのことはやりましたか?
またファイル名を指定して実行やエクスプローラのアドレス等にそのパスを直打ちしたら動きましたか?
レスありがとうございます。
「葉月α」様よりご指摘のありました、
アドレスバーからのコピー貼り付けや、
ショートカットを作ってそのリンク先アドレスのコピー貼り付けも
スレッドを立てる前にやりました。
でもダメでした。
WS.Run"xcopy/e/y/d"&sp&srcpath&sp&dstpath
xcopyのあとにスペースを1つ入れてみたら
順序が逆な気がする
"xcopy/e/y/d"&sp&srcpath&sp&dstpath
を表示なりファイルに書き出すなりする
楽をするならメッセージボックスだがコピペ出来ないので
テキストファイルへの書き出しが望ましい
それをコマンドとして正しいか目視確認後、コピーしてDOSで実行する
DOSでファイルが見つかりませんという応答が返ってくるのがこの場合普通かな?
あとは
アドレスバーから貼り付けるのではなく
アドレスバーに貼り付ける・・・が私の言いたいこと
ファイルが存在するならそのままエンター叩けばファイルを実行するはずということ
また上記確認より
123さんの言ってる事も確認できるはず
今回の場合まず文字列が正常か?というところから確認するのがいいかと・・・
あとは〜そうだねぇ
WS.Runの後に半角スペースとか・・・
WS.Run"xcopy/e/y/d"&sp&srcpath&sp&dstpath
↓
WS.Run "xcopy/e/y/d"&sp&srcpath&sp&dstpath
連投すまん・・・
XCOPYのヘルプ見たら
XCOPY 送り側 [受け側] [/A | /M] [/D[:日付]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/H] [/R] [/T] [/U]
[/K] [/N] [/Z]
[/EXCLUDE:ファイル1[+ファイル2][+ファイル3]...]
となっているが大丈夫かな?
だめだめな私・・・
上記書式(HELPに関して)はまったく問題ないですね
ごめんなさい
ちょっと、視点をかえて...
>行:39
>文字:2
>エラー:指定されたファイルが見つかりません
>コード:80070002
これは、具体的には、どの行を指していますか?
このエラーが出てるなら、VBScript上のエラーの気がします。
XCOPYのコマンドラインでのエラーならVBScriptのエラーにならないんでは?
ひとつの可能性としては、XCOPY.EXEが見つからない(パスが通っていない)
ということもあるかも。
実際にそれを動かしているOSは何ですか?
DOS窓でXCOPYが実行できますか?
そのVBScriptはどうやって実行していますか?
手打ちじゃなくて、そのスクリプト全文をコピペしてほしい気がしますが。
ちなみに、
createobject("WScript.Shell").Run("xcopy/e/y/d aaaa")
はエラー(ファイルが見つかりません)
createobject("WScript.Shell").Run("xcopy /e/y/d aaaa")
はOK(エラーにならない)。
DOS窓で、
xcopy/e/y/d aaaa
はOK(エラーにならない)。
解決しました!!
xcopyのあとにスペースを1つ入れてみたら
見事に実行されました。
レスいただきました皆様、
本当に、本当にありがとうございました。
私のようなド素人のスレッドに
このようなご指摘・ご教示をいただき
本当になんて言ってよいのか・・・
本当にありがとうございました。
私ももっともっと勉強して、
皆様方のように一日も早くなれるよう
精進したいと思います。
本当にありがとうございました。
ツイート | ![]() |