[VBS]ファイルコピーで怪奇現象

このQ&Aのポイント
  • FileSystemObjectを使用してファイルコピーを行うVBSスクリプトで、特定のCopyFileメソッドがエラーを発生してしまう問題が発生しています。
  • エラーが発生するCopyFileメソッドの実行直前にダイアログを表示させるとエラーが発生せず、処理が正常に通過します。
  • 問題の原因としては、CopyFileメソッドの使用タイミングや変数の内容に問題がある可能性が考えられます。
回答を見る
  • ベストアンサー

[VBS]ファイルコピーで怪奇現象

FileSystemObjectでファイルをコピーしたく、下記のようなコードを書きました。 SYSFILEはファイル名です。(拡張子なし) ******************************************************* Dim objFileSys SYSFILE Set objFileSys = CreateObject("Scripting.FileSystemObject") objFileSys.CopyFile("C:\TEST\", "C:\REAL\SYSFILE") C:\REAL\SYSFILE"を編集して"C:\REAL\SYSFILE_NEW"を作成(コード省略) SYSFILE_NEWを読み込んで最終行の番号を取得(コード省略) ’取得した番号にリネームコピー objFileSys.CopyFile("C:\REAL\SYSFILE_NEW", "C:\REAL\XXX")←★  ******************************************************* ★のCopyFileで「ファイルが見つかりません」のエラーになります。 "C:\REAL\SYSFILE_NEW"は確実に作成されて存在しますが発生します。 おかしいと思って直前にFileExistsをしてもFalseになります。 エクスプローラー上では確かに存在するし、コピーもできます。 実際はファイル名の箇所は変数名なので中身を確認しようと★の直前行で echoで出力してみたが、変数の中身も問題ありませんでした。 おかしいのがその後です。 今度はエラーにならずに処理が通りました。 直前にechoでダイアログを表示させた場合にはエラーが発生しません。 その記述を削除するとまた発生します。 考えられる原因を教えていただきたいです…

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

  • ベストアンサー
noname#247307
noname#247307
回答No.1

C:\REAL\SYSFILE"を編集して"C:\REAL\SYSFILE_NEW"を作成(コード省略) SYSFILE_NEWを読み込んで最終行の番号を取得(コード省略)       ↑ この部分に問題があるのでは? どうやってるのかわからないんですが、例えばファイルを閉じてないためCopyFileでファイルが取得できないとか、そういったことはないでしょうか。

beginnerSEPG
質問者

お礼

その通りでした。ありがとうございます

関連するQ&A

  • VBSで作成したフォルダにファイルをコピー出来ない

    いつもお世話になっております。 表題に関してなのですが、VBSでFileSystemObjectを利用してフォルダを作り、 そのフォルダにファイルをコピーするという内容のスクリプトを作成しています。 ですが、フォルダは無事に出来るのですが、ファイルをコピーしようとすると、 「書き込み出来ません」 と出て、コピーされません。 fso.CopyFileのところで、エラーが発生してるようです。 CopyFileメソッドの代わりにCopyコマンドで実行するように記述すると 問題なくコピーされます。 解決方法等ございましたら、ご教授ねがいます。

  • クライアントPCからファイルのアップロード

    ASPでファイルをアップロードするシステムを作っています。 クライントPCにあるファイル(<Input type=file>タグを使ってファイルのパスを取得)を、サーバーPCの指定したフォルダへコピーしたいです。 FileSystemObjectを使って、このような処理は可能でしょうか? Set objFileSys = CreateObject("Scripting.FileSystemObject") objFileSys.CopyFile "C:TEST\ABC.txt","D:TEST\" 現在、このような記述をしたところサーバーPCの"C:TEST\ABC.txt"をサーバーPCの"D:TEST\"へコピーするだけになってしまいます。 やりたいことはクライアントPCの"C:TEST\ABC.txt"をサーバーPCの"D:TEST\"へコピーです。 なにか良い方法がありましたら教えてください。

  • VBSバックアップ

    バックアップスクリプト(VBS)について教えて下さい。 単純にディレクトリをバックアップするスクリプトは、出来たのですが これに付加機能を与えたいです。 ◆世代管理をしたい。 ◆iniファイルから、バックアップ元と先、管理する世代等の情報を読み込みたい。 <bkup.vbs> Option Explicit Const ForReading = 1 '読み込み Const ForWriting = 2 '書きこみ(上書きモード) Const ForAppending = 8 '書きこみ(追記モード) Dim objFileSys Dim objShell Dim strCopyFrom Dim strCopyTo Dim strToDir Dim strNewDate WScript.echo "バックアップを開始します" Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") strNewDate = Year(Now) & _ Right(("0" & CStr(Month(Now)+0)),2) & _ Right(("0" & CStr(Day(Now)+0)),2) strCopyFrom = "C:\vbs" strToDir = "C:\backup" strCopyTo = objFileSys.BuildPath(strToDir,strNewDate) If objFileSys.FolderExists(strCopyTo) = True then WScript.echo "指定のパスには既にディレクトリが存在する為、" & _"バックアップ処理を中断します。" WScript.Quit Else objFileSys.CopyFolder strCopyFrom,strCopyTo WScript.echo "バックアップ処理は正常に完了しました。" End If Set objFileSys = Nothing Set objShell = Nothing 宜しくお願い致します。

  • CreateObjectでエラー

    VB初心者です。 VB6で以下のコードのCreateObjectがエラー になってしまいます。 何が原因と考えられますか? Dim objFileSys As Object CheckFileExist = False 'ファイルの有無を確認する Set objFileSys = CreateObject("Scripting.FileSystemObject")   ↑   ここで、エラーが発生 CheckFileExist = objFileSys.FileExists(S_strFileFull) Set objFileSys = Nothing   エラーメッセージが   「オートメーションエラーです。    ライブラリが登録されてません。」   と出てしまいます。何が原因と考えられますか?   よろしくお願いします。

  • ActiveXObjectについて

    var objFileSys = new ActiveXObject("Scripting.FileSystemObject"); のところで ActiveXObject is not defined というエラーが出るのですがどうしたらいいか方法教えてください。 <script type="text/javascript"> <!-- var strScriptPath; var strCreateFile; var strDate; //(1)現在時刻をHHMMSSの形式で取得します strDate = getTime(); //(2)ファイルシステムオブジェクトの作成 var objFileSys = new ActiveXObject("Scripting.FileSystemObject"); //(3)プログラムが保存されているフォルダを取得します strScriptPath = String(WScript.ScriptFullName).replace(WScript.ScriptName,""); //(4)プログラムが保存されているフォルダに、新たにファイルを作ります // ファイル名は現在の時刻(HH_M_S形式)+拡張子(.txt)です strCreateFile = objFileSys.BuildPath(strScriptPath,strDate + ".txt"); objFileSys.CreateTextFile(strCreateFile); WScript.echo(strScriptPath + "に" + strDate + ".txtという名前のファイルを作りました"); //オブジェクト破棄 objFileSys = null; function getTime() { //時刻を編集し返す var objDate = new Date(); return objDate.getHours() + "_" + objDate.getMinutes() + "_" + objDate.getSeconds(); } //--> </script>

  • ファイルをコピーしたい。できれば圧縮まで。

    Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile("C:\WINDOWS\デスクトップ\作業時間.xls","C:\WINDOWS\デスクトップ\kiroku\作業時間.xls") デスクトップにある作業時間というエクセルのファイルをkirokuフォルダにコピーをしようと、上記のWSHを書きました。 (当方 WSHとVBスクリプトの違いはよくわかりません。) ところが実行すると スクリプト: C:\WINDOWS\デスクトップ\kopi.vbs 行: 2 文字: 82 エラー: Sub プロシージャを呼び出すときに、かっこを使うことはできません。 コード: 800A0414 ソース: Microsoft VBScript コンパイル エラー とエラーになります。  たぶん ” の使い方が悪いと思うのですが、どうもうまくいきません。 どこが悪いか指摘してください。 当方 ME使用してます。  フロッピーにバックアップを取るために毎回コピーと圧縮を繰り返しているので自動化できないかと考えてます。 

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • FileSystemObject CopyFile の指定したファイル名にアスタリスクが付いていないと書き込みエラーが発生する

    プログラム初心者です。宜しくお願いします。 職場で新PCを数十台導入したのでデータのお引越しをすることになりました。 主要なものはFASTWIZ.EXEを使用しますがNOTESデータの一部もデータ移管したいのです。 そこで以下のスクリプトを書いてみました。 ------------------------------------ 1 Dim objWshShell, objSF, FSO 2 Set objWshShell = CreateObject("WScript.Shell") 3 Set objSF = objWshShell.SpecialFolders 4 Set FSO = CreateObject("Scripting.FileSystemObject") 5 FSO.CopyFile "c:\notes\data\*.id", objSF.Item("MyDocuments") 6 FSO.CopyFile "c:\notes\data\desktop.dsk", objSF.Item("MyDocuments") 7 FSO.CopyFile "c:\winnt\notes.ini", objSF.Item("MyDocuments") ------------------------------------ ファイル名にアスタリスクを入れていないと書き込み出来ないとエラー(800A0046)が発生してしまいます。調べてみましたら権限が無いと発生するエラーだったのですが 例えば 7 FSO.CopyFile "c:\winnt\notes*.ini", objSF.Item("MyDocuments") のようにファイル名の一部にアスタリスクを追加するとエラーが発生せず正常に実行されます。 ? アスタリスクを付ければ正常に動作するので良いんですが、何故なのか分からないと気持ちが悪くていけません。 調べてみたのですが分からず皆様のお知恵を拝借出来ないかと書き込ませて頂きました。 宜しくお願い致します。

  • ACTIVXが見つかりませんと表示されてしまいます

    phantomjsで以下のコードのJSファイルを使おうとすると cant find valiable : ACTIVXobject と表示されてしまいます。 JSをダブルクリックして起動すると正常に起動します。 phantomjsのコードと組み合わせて今後使う予定です。 どうすればよいでしょうか。 どなたが教えていただけないでしょうか。 よろしくお願いいたします。 var strScriptPath; var strOpenFile; var objTextStream; var strText; var objFileSys = new ActiveXObject("Scripting.FileSystemObject"); strScriptPath = String(WScript.ScriptFullName).replace(WScript.ScriptName,""); strOpenFile = objFileSys.BuildPath(strScriptPath, "TestData.txt"); objTextStream = objFileSys.OpenTextFile(strOpenFile); while (objTextStream.AtEndOfLine==false) { strText = objTextStream.ReadLine(); WScript.echo(strText); } objTextStream.Close(); objTextStream = null; objFileSys = null;

  • VBS でファイルをコピーする際にコピー状況を表示させる

    現在VBSで、ファイルのコピー部分を作っています。 記述コード↓ fso.CopyFile コピー元ファイル , コピー先フォルダ, True ' コピー自体は出来るのですが、コピー中に何も表示されないので 大容量のファイルをコピーしている際に何も表示されない時間が長く実行されているのか不安になります。 コピー状況を明示させるようなコマンドは無いのでしょうか?? 解る方いらっしゃいましたら教えてください。 また、全然関係ないのですが、わかれば教えてほしい点が1点。 Run関数でプログラムを実行させるコードで昔記述したものがあり、 オブジェクト名.Run "C:\temp\SP3\test.vbs /q/z" こういったのがあるんですけど、 /qと/zが何を表すのかわからなくなってしまいました。 Run関数を調べると、オプションの値は0から始る数字になっていて /qとか/zを設定するなんていう説明が見当たりませんでした。 解る方いらっしゃいましたら教えてください。

専門家に質問してみよう