• ベストアンサー
  • すぐに回答を!

「VBScript」でのファイルのコピーについて

こんにちわ テキストファイルに記述されている「ファイル名」とフォルダ内の 「ファイル名」を比べて一致しているものを別のフォルダにコピー するというツールを作っています。 読込んテキストファイルの内容とフォルダ内のファイルを比較する にはどのようにすればいいのでしょうか? 宜しくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数765
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.2

C:\Data\Administrator\Others\Oshiete_Goo\Quarter4\Q3479988 【vbsとファイル名リストのテキストはUTF-16LE(WindowsではUnicodeと略されることが多いが,これは文字符号化形式の名称ではない)でなければならない。これが解らず忘れて数十分悩んだ。】 =============Q3479988A.vbs================ Option Explicit '定数。意味は自分で調べること。 Const TristateTrue = -1 Const TristateFalse = 0 Const TristateUseDefault = -2 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 '実際には以下はカレントディレクトリから引いてくるとか, 'コマンドライン引数として受け取るのが妥当だろうな。 Dim ListFilePath 'ファイル名のリストの書かれたファイルのあるパス Dim ListFileName'ファイル名のリストの書かれたファイルのファイル名 ListFilePath = "C:\Data\Administrator\Others\Oshiete_Goo\Quarter4\Q3479988" ListFileName = "Q3479988A.txt" Dim ListFile '(初期値なし) Dim CurrentFileName '(初期値なし) CurrentFileName = "" Dim ComparedPath '実際のファイルがあるパス Dim ComparedFiles 'ファイルオブジェクトのリスト(初期値なし) Dim ComparedFile ComparedPath = "C:\Data\Administrator\Others\Oshiete_Goo\Quarter4\Q3479988\data" Dim DestinationPath '一致したときに移動するパス。 DestinationPath = "C:\Data\Administrator\Others\Oshiete_Goo\Quarter4\Q3479988\dest" Dim FSO Set FSO = Wscript.CreateObject("Scripting.FileSystemObject") Set ListFile = FSO.OpenTextFile(ListFilePath & "\" & ListFileName,ForReading,false,TristateTrue) Set ComparedFiles = FSO.GetFolder(ComparedPath).Files On Error Resume Next Do While Not ListFile.AtEndOfStream Dim i CurrentFileName = ListFile.ReadLine For Each ComparedFile in ComparedFiles 'Existsを使わない理由は,テキストファイルにC:\とか '..\..\..\..\..\Windows\System32\notepad.exeとか '書かれているかもしれないから。 'これらは無条件でヒットしない 'どうしても使いたいなら,指定されたフォルダと同じフォルダかを 'きちんとチェックする必要がある 'ショートファイルネームについては考慮しない If ComparedFile.Name = CurrentFileName Then '後半は上書きフラグ。 ComparedFile.Copy DestinationPath & "\" & CurrentFileName,false Else End If ComparedFile.Close Set ComparedFile = Nothing Next Loop On Error Goto 0 Set ComparedFiles = Nothing ListFile.Close Set ListFile = Nothing Set FSO = Nothing Msgbox("完了") 'メッセージ出しておかないと???になる =================Q3479988A.txt=============== b.txt d.txt C:\Book.xls ..\Q3479988.txt =================dataフォルダ============== a.txt b.txt c.txt d.txt =================destフォルダ=============== (元々空)だttが 実行後 b.txtとd.txtが出来ている

共感・感謝の気持ちを伝えよう!

質問者からの補足

himajin100000 さん ありがとうございます。読み込むtxtファイルには「12345.gif」 や「123456.GIF」というgifファイル名のみになるため、できれば 再帰処理でファイル名を取得したいと思っています。 下記のように記述し「ルートフォルダ内のファイル名」と 「サブフォルダ名」の取得はできるのですが、やはりサブ フォルダ内のファイル名取得ができません。 以上、宜しくお願い致します。 sub SubFoleder(inFolderName) txOut="" inFolderName = ifd.value Set objFso = CreateObject("Scripting.FileSystemObject") 'ファイルの有無チェック If objFso.FolderExists(inFolderName) = True Then 'フォルダのオブジェクトとコレクションを得る Set objFolder = objFso.GetFolder(inFolderName) Set colFiles = objFolder.Files Set colFolders = objFolder.SubFolders 'inFolder内のファイル処理 For Each objFile In colFiles txOut = txOut & objFile.Name & vbCr Next 'inFolder のSubFolder 内のファイル処理 For Each objSubFolder In colFolders '↓サブフォルダ名の取得 txOut = txOut & objSubFolder.Name & vbCr 'Call SubFoleder(objSubFolder) disp.value= txOut &vbCr Next If objFolder.IsRootFolder Then parentFolder = "なし" Else parentFolder = objFolder.ParentFolder End If 'ファイルが無いとき Else MsgBox(inFolderName&"フォルダはありません") End If End Sub

関連するQ&A

  • VBScriptでフォルダ内の全ファイル名取得

    こんにちは VBScriptでツールを作成しています。 フォルダA内の全ファイルをリネームして 別フォルダB内に同じファイル名があればリネームして フォルダA内のファイルをコピーしたいのですが 一度にフォルダ内の全ファイル名を取得する方法が分かりません。 なにかいい方法は無いでしょうか?よろしくお願いします。

  • ファイルのコピーについて

    次のようにファイル名が記述されている、テキストファイルがあります。 「A.xls,B.txt C.doc,D.xls,E.pdf」 行と行はEnterで改行されており、ファイ名は「,」で区切られています。 この状態で、最後の行の複数のファイルを特定のフォルダにコピーするにはどのように記述すればいいですか?

  • バックアップとしてのファイルコピーツール

    普段のバックアップとしてファイルコピーのツールを使用しています。 フォルダーを指定してそれ以下のファイルを指定先にコピーしてくれ、タイムスタンプの比較もして新しい物だけをコピーする等結構便利です。ただ、「除外」の指定が出来ません。 Aというフォルダの下にA1・A2・A3というフォルダがあって、A2はコピーしたくない…というときに、Aを指定すると余計なA2もコピーされちゃいます。この場合A1とA3を個別に指定しなくてはダメです。2個くらいなら良いけど、たくさんある時に不便なので、結局Aを指定してコピーに時間がかかっちゃいます。 「A以下をコピー」でも「A2はしない」という指定でさっとコピー出来るようなツールありませんか?今使ってるタイムスタンプの比較なんかも出来る物が良いのですが。 ちなみにOSはwindows xp ですので、これで使える物をご存じでしたら教えてください。

その他の回答 (1)

  • 回答No.1
  • NOBNNN
  • ベストアンサー率50% (93/186)

読み込んだTEXTファイルに書かれている ファイル名がフォルダに存在するかどうかEXISTS関数 で検査し、ファイルがあれば別のフォルダにコピーするようにしては・・・

共感・感謝の気持ちを伝えよう!

質問者からの補足

NOBNNNさん ありがとうございます。 それぞれの「参照」については以下のように作ってみたのですが、 取得した「テキストファイルのファイル名」と「参照元フォルダ内 のファイル名」の検査方法がわかりません。 下記では、「テキストファイルのファイル名」をテキストエリアに 表示するということはできたのですが、、、 参照元のサブフォルダ内のファイル名まで取得して検査し、一致した ものを「保存フォルダ」にコピーして、一致していないファイル名は textで「Const NON_FILE = "C:\NONList.txt"」として出力したいのですが、 こういった場合は、複数のsubなどで分けてcallした方が良いのでしょうか? サンプルコードなどをいただけたらと思います。 以上、宜しくお願い致します。 <HAT:APPLCATION BORDER="dialog" SCROLL="no" ICON="app.ico"> <script language="VBS"> Call Window.ResizeTo(500,200) '参照元フォルダ選択 sub inFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ifd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '保存先フォルダの選択 sub outFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ofd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '処理・・・orz sub MainProc() txOut="" inFileName = inFile.Value Set objFso = CreateObject("Scripting.FileSystemObject") 'ファイルの有無チェック If objFso.FileExists(inFileName) = True Then '書き出し処理 Set objTxIn = objFso.OpenTextFile(inFileName) Do Until objTxIn.AtEndOfStream = True txDisp = objTxIn.ReadLine() txOut = txOut & txDisp & vbCr Loop disp.value = txOut 'ファイルが無いとき Else MsgBox("ファイルがありません") End If End Sub </script> </head> <body> 参照ファイル&nbsp;&nbsp;: <input type="file" id="inFile" size="40"> <br /> 参照フォルダ&nbsp;: <input type="text" id="ifd" size="40"> <input type="button" id="btn1" value="参照.."> <script for="btn1" event="onClick" language="VBS"> call inFolder() </script> <br /> 保存フォルダ&nbsp;: <input type="text" id="ofd" size="40"> <input type="button" id="btn2" value="保存.." > <script for="btn2" event="onClick" language="VBS"> call outFolder() </script> <br /> <input type ="button" id="btn3" value="実行"> <script for="btn3" event="onClick" language="VBS"> call MainProc() </script> <textarea name="disp" cols="60" wrap="VIRTUAL" rows="20">

関連するQ&A

  • コピーしたファイルに“コピー~”と付けたくない

    宜しくお願いします。 ファイルやフォルダをコピーすると、 “コピー~ ファイル名”となりますが、ファイル名の前につく、コピー~ を付けないようにするには、どうすれば良いのでしょうか。教えて下さい。 以前雑誌で見かけたのですが覚えておらず、googleで見ても、雑誌を読み返してもわかりませんでした。 ご存知の方、教えて下さい。宜しくお願いします。

  • ファイルをコピーせずにフォルダのみをコピー出来るフリーソフトを紹介ください

    フォルダがたくさん有って、各フォルダには大量のファイルが あります。そのフォルダと同じ名前のフォルダを別のフォルダB内に 作りたいのですが、フォルダがたくさん有って、手でフォルダ名を 打ったりするのは大変です。 フォルダをフォルダB内にコピーすれば良いのですが、 フォルダ内にファイルがたくさん有って時間が掛かったりして 大変です。 そこで、フォルダのみコピーするソフトがほしいのですが、 ご存知の方教えてください。

  • ファルダ内に散在してるファイルを検索し一箇所にコピーしたい

    Excelセルに記述したファイル名(ワイルドカード指定可)で、 フォルダ、サブフォルダ内に、ばらばらに散らばっているファイルを 検索し、見つけたら特定のフォルダに全部集めたい(コピーしてくる)のですが、スクリプトをご教授いただけないでしょうか? よろしくお願い致します。

  • ファイル(画像)の抽出について

    初心者ですが、宜しくお願い致します。 テキストファイルに記述されているファイル名を詠み込んで、ディレクトリ内 (サブディレクトリ内も)のファイル名と比べて、同じファイル 名のものを別のディレクトリに保存して、同じファイル名がないもを テキストとして出力することは可能でしょうか? ファイルの読込やディレクトリ内のファイル名の取得など別々には できるようなのですが、、、、 初歩的なことで、申し訳ありませんが宜しくお願い致します。

  • VBScriptでのファイルコピー

    こんにちは いつもお世話になります。 現在、「ファイルの指定ダイアログ」で選択されたファイルの中身(ファイル名) と「フォルダ指定ダイアログ(参照先)」で選択されたフォルダ(サブフォルダ含む) 内のファイルの名前を比較して、一致しているファイルを「フォルダ指定ダイアログ (保存先)」にコピーし、一致しないファイル名を同じく「フォルダ指定ダイアログ (保存先)」に出力するというツールを作成しています。 以下を実行させても、ファイルのコピーも出力もされないのですが、教えていただけます でしょうか。 宜しくお願い致します。 ---------------------------------------------------------------------- <html><head> <script language="VBScript"> 'Call Window.ResizeTo(500,200) Set objFso = CreateObject("Scripting.FileSystemObject") 'テキストファイル吐き出し場所 Const LIST_FILE = "C:\Documents and Settings\All Users\デスクトップ\NonFile.txt" '色々宣言 Dim objFso Dim inFolderName Dim outFolderName Dim inFileName Dim objTxIn Dim ListFile Dim CurrentFileName '色々定数 Const TristateTrue = -1 Const TristateFalse = 0 Const TristateUseDefault = -2 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 '参照フォルダをテキストに表示 '------------------------------------------------------------ sub inFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ifd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '保存先フォルダの選択 '------------------------------------------------------------ sub outFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then 'MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ofd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '------------------------------------------------------------ Sub btn_onClick 'ファイルの有無チェック txOut="" inFileName = inFile.Value outFolderName = ofd.value If objFso.FileExists(inFileName) = True Then Set ListFile = objFso.OpenTextFile(inFileName,ForReading,false,TristateTrue) 'ファイルが無いとき Else MsgBox("ファイルが選択されていません。") End If Call iFolder(inFolderName) MsgBox("完了") End Sub 'サブフォルダ内ファイル検査→有 コピー/無 テキスト出力 '------------------------------------------------------------ Sub iFolder(inFolderName) CurrentFileName="" 'フォルダオブジェクト取得 outFolderName = ofd.value If inFolderName ="" then inFolderName = ifd.value Set fsoFolder = objFso.GetFolder(inFolderName) On Error Resume Next CurrentFileName = ListFile.ReadLine For Each fsoFile In fsoFolder.Files If fsoFile.Name = CurrentFileName Then fsoFile.Copy outFolderName,CurrentFileName,false Else set NoFile = objFso.CreateTextFile(LIST_FILE,True) NoFile.WriteLine(CurrentFileName) NoFile.Close End If fsoFile.Close Set fsoFile = Nothing Next For Each fsoSubFolder In fsoFolder.SubFolders Call iFolder(fsoSubFolder) Next End Sub </script> </head>

  • 特定のフォルダ内のある種類のファイルをすべてコピーし格納する方法

    WINDOWSマシン使用。 あるフォルダ(AAA)の中に、複数のフォルダやファイルを含み、またそのフォルダは、 は、下位のフォルダやファイルを含むという関係が続きます。階層は4くらい。 この中の各所にあるフォルダにはwordのファイルやその他のファイルを含んで います。 このwordのファイルだけをすべて選択しコピーして、別のフォルダ(BETU)へ 入れたい。 簡単に行なう方法、あるいはツールなどあれば紹介をお願いします。

  • リストにあるファイルを検索して特定フォルダにコピー

    フォルダの中に10000個のファイルがあり、 特定の100個のファイルをコピーしたいのですが、 手軽に行えるツールややり方はあるでしょうか。 必要な100個のファイル名だけが分かっているという条件です。

  • ファイルが一部見えなくなった

    こんにちは、突然ですが質問があります。 とあるフォルダにまとめて入れておいたデータがあるのですが、 そのフォルダの中にあったテキストファイル等が見えなくなってしまいました。 プロパティを見ると、「内容」の項目にあるファイル数と、実際に見えているファイル数が一致してないので データ自体は残っているのではないかと思うのですが… どなたか、これらのファイルを再び見えるようにする方法はご存知ありませんでしょうか? なお、「フォルダオプション」から「全てのファイルとフォルダを表示する」へのチェック、および「保護されたオペレーティングシステムファイルを表示しない」のチェック外しは行ってみましたが、効果はありませんでした。

  • バッチ処理でファイルのコピー

    外付けHDD内にカテゴリごとにフォルダ分けされた5000個のファイルのうち エクセルのa列にあらかじめ記載された1000項目のファイル名と同じファイルを取り出し 違う場所のフォルダにコピーさせ一箇所に集めたいです。(cドライブ内や、違う外付けHDDなど) 現在一つ一つ手作業で、コピーさせています。 早く作業が終わらせれる バッチ処理やコマンドプロントの処理があれば、ご教授お願いできないでしょうか? 作業としては、単純そうなのですが、1日つぶしてしまい、時間をもったいなく感じております。 よろしくお願い致します。 ※補足 フォルダ名サブフォルダ名ファイル名には日本語が含まれていることもあります。 またファイル名で名前が重複しているものはありません。

  • D&Dでファイルをコピーをしたい

    業務上、ダブルクリックでファイルをコピーするバッチファイルを作成して使用しています。 コピー元とコピー先は毎回同じですが、ファイル数やファイル名は毎回変わります。 したがって、バッチファイルの中身を毎回書き換えています。 バッチファイルの記述をドラッグ&ドロップに対応するような構文にできれば、 ファイル名が変わってもドラッグ&ドロップでファイルがコピーできて便利だなと思ったのですが、 それは可能なのでしょうか。 可能であれば、記述をお教えいただけますでしょうか。 ネットを検索しましたが、VBでドラッグ&ドロップを実現する記述がたくさんありますが、 敷居が高くて理解できませんでしたし、 コマンドプロンプトのコマンドも探しましたが、見つかりませんでした。 set inputとset outputで特定のフォルダ内のファイルをバッチで参照して連続してコピーしてくれないかなと思ったのですが、 現在試してみています。