VBScriptでフォルダ内の拡張子によって処理を分けたい

このQ&Aのポイント
  • VBScriptを使用してフォルダ内の拡張子によって処理を分ける方法について相談です。
  • フォルダ内の拡張子によって処理を分けるVBScriptのスクリプトを作成したいです。
  • フォルダ内に特定の拡張子のファイルが存在する場合は処理Aを、存在しない場合は処理Bを行うVBScriptのコードを作成したいです。
回答を見る
  • ベストアンサー

VBScriptで、フォルダ内の拡張子によって処理を分けたい。

VBScriptで、フォルダ内の拡張子によって処理を分けたい。 C:\WORK\*.xls C:\WORKの配下に「xls」ファイルが存在していた場合、Aの処理を行い、 存在していなかった場合、Bの処理を行うというスクリプトを作成したいと思っております。 しかし・・・ --------------------------------------------------------- Set objFSC = CreateObject("Scripting.FileSystemObject") If objFSC.FileExists("C:\WORK\*.*") = "xls" Then 【処理A(xlsファイルの削除/別のフォルダからxlsファイルのコピー】 Else 【処理B(別のフォルダからxlsファイルのコピー)】 End If --------------------------------------------------------- とした場合、FileExistsメソッドがワイルドカードに対応していないため 処理が行われません。 フォルダの中には"xls"以外の拡張子のものも存在しており、フォルダごと削除する 訳にもいきません。また、個別に名前を指定することも出来ない状況です。 どなたか、お力をお貸しいただけないでしょうか。 以上 よろしくお願いいたします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

シェルで削除すれば如何です? Dim SHL Set SHL = CreateObject("WScript.Shell") SHL.Run "CMD.exe /C DEL C:\WORK\*.xls", 0, True ファイルが無くても別に何もしないだけです。 ついでにコピーもできます。 SHL.Run "CMD.exe /C COPY C:\hoge\*.xls C:\WORK", 0, True

shimegi
質問者

補足

ご回答ありがとうございます。 シェルで削除するという方法があるのですね!やってみます。

その他の回答 (1)

  • lesskey
  • ベストアンサー率33% (66/200)
回答No.2

ワイルドカードでエクセルファイルだけ削除したいなら DeleteFileメソッドを使えば良いのでは? # objFSC.DeleteFile "C:\WORK\*.xls"

参考URL:
http://homepage2.nifty.com/pasocon/nyumon/filesystemobject/deletefile.html

関連するQ&A

  • Office2007の拡張子

    Dosでバッチを作っています。 あるフォルダ内に複数のExcelファイルがあり、それを別のフォルダにコピーしようとしています。 ただ、このコピー元のフォルダにはExcel2007のファイルも含まれている為、拡張子がxlsとxlsxの2種類が存在します。 コピーしたいのは、xlsのファイルだけにしたいのですが、どのようにすればいいのでしょうか? copy コピー元のパス\*.xls コピー先のパス /Y ↑ これだとxlsとxlsxの両方がコピーされてしまう。

  • フォルダ内の特定の拡張子を消したいとき

    今、visual basic 2005の勉強をしているものですが、特定のフォルダの中の特定の拡張子 .txt .xlsなどを削除したいときはどのようにすればよいでしょうか? また、フォルダの中にフォルダがある場合、その中の拡張子も削除したいのですが可能でしょうか?

  • WSH_フォルダ内の処理について

    昨日から作成しているのですが、 新しく質問を立ち上げます。 下記のように、フォルダ内に格納してあるファイルを 取得できるのですが、フォルダ内で作成日時を見て 最新のファイル以外は削除させたい処理をやりたいです。 ファイル名を明示的に記載し比較はできるのですが、 フォルダ内の中から作成日時の最新のファイルを取得する っていうのができません。 下記ソースはイメージです。 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\test") For Each objFile In objFolder.Files If objFile.type = ファイルタイプ Then   上記ファイルタイプで最新の日付のファイルを出力 上記ファイル以外削除 Else  上記ファイルタイプが存在しなければ何も処理を行わないず フォルダ内のファイル一覧を取得 WScript.Echo " " & objFile.Name Wscript.Echo "NG" End If Next 調べているのですが、簡単なソースしか作れません。 お願いします

  • ExcelVBA別フォルダにあるブックのコピー方法

    ExcelVBAでデータを条件に応じてコピーしたいと思っています。 同一階層に「VBAファイル.xls」「1_フォルダA」「2_フォルダB」「3_フォルダC」があります。 「1_フォルダA」と「2_フォルダB」には年代別に分かれたファイルがあります。 ファイルとフォルダの構造は以下の通りです。 VBAファイル.xls 1_フォルダA  ∟1999_ファイルA.xls  ∟2000_ファイルA.xls  ∟2001_ファイルA.xls  ∟2002_ファイルA.xls  ∟2003_ファイルA.xls  ∟2004_ファイルA.xls  ∟2005_ファイルA.xls  ∟2006_ファイルA.xls  ∟2007_ファイルA.xls  ∟2008_ファイルA.xls  ∟2009_ファイルA.xls  ∟2010_ファイルA.xls  ∟2011_ファイルA.xls  ∟2012_ファイルA.xls 2_フォルダB  ∟1999_ファイルB.xls  ∟2000_ファイルB.xls  ∟2001_ファイルB.xls  ∟2002_ファイルB.xls  ∟2003_ファイルB.xls  ∟2004_ファイルB.xls  ∟2005_ファイルB.xls  ∟2006_ファイルB.xls  ∟2007_ファイルB.xls  ∟2008_ファイルB.xls  ∟2009_ファイルB.xls  ∟2010_ファイルB.xls  ∟2011_ファイルB.xls  ∟2012_ファイルB.xls 3_フォルダC  ∟ファイルC_結果.xls 「VBAファイル.xls」では添付の画像のような「ActiveXコントロール」を設定しました。 コンボボックスで西暦を選択すると、選択した年を中心年として、 前後1年を合わせて合計3年がラベルに表示されます。 その年のファイルのデータが「ファイルC_結果.xls」にコピーされるようにしたいです。 例えば画像のように「2007」を選択した場合、 ・「2006_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のD7~D25にコピー ・「2007_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のE7~E25にコピー ・「2008_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のF7~F25にコピー ・「2006_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のH7~H25にコピー ・「2007_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のI7~I25にコピー ・「2008_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のJ7~J25にコピー というようにしたいです。 「ファイルC_結果.xls」のD/E/F列はファイルAのデータで、 D列は前年、E列は当年、F列は翌年 H/I/J列はファイルBのデータで、 H列は前年、I列は当年、J列は翌年の値をコピーして貼り付けたいです。 また、可能であれば「ファイルC_結果.xls」は原本なので、 値をコピーする際にファイル名が変更できればよりよいです。 いろいろ書いてしまい、うまく伝わっているか不安なのですが 処理するデータが多くとても困っています。 お知恵のある方、どなたか助けていただけますと幸いです。 よろしくお願いいたします。

  • バッチファイルで指定拡張子以外のファイルをコピーする方法

    OK Waveページ内を検索してみましたが、同じような質問をされている方がいないようでしたので、新規で質問させていただこうと思います。 ある特定のフォルダに入っているファイルを、指定した拡張子以外のファイルのみコピーしるバッチファイルを作成したいのですが、よい方法がみつかりません。 コマンドの操作方法をいろいろ調べてはみたのですが、 指定拡張子以外をコピーするようなコマンドがないようです。 例えば、c:\TEST_Aに、a.xls, b.doc, c.txtとファイルがあって、拡張子が"txt"以外のファイルをすべてc:\TEST_Bフォルダにコピーを取りたい場合、どのようにバッチファイルを組めばよいでしょうか。 以上、宜しく御願い致します。

  • フォルダコピーで失敗したファイル名をログに取得したい

    こんにちは。 フォルダのコピーをVBスクリプトを使って出来ないか検討しています。 条件は 1. コピーするフォルダにはファイルやサブフォルダが複数存在している 2. コピー途中でエラー(コピー出来ないファイルがあった場合等)が発生した場合はそのファイルをスキップして処理を継続する。 3. エラーの対象となったファイルまたはフォルダ名をログに出力する。 試しにVBスクリプトで作成してみましたが、これだとコピー処理が成功or失敗しか分かりません。 イメージ的には、コピー元のフォルダ内の各ファイルの情報を取得して、ひとつひとつのファイル毎にループ制御を使ってコピー処理を行いその際に正常にコピーしたかどうかをチェック出来ればと考えています。 以下のソースは上記の条件を満たしていませんが、(参考になりませんが)参考として載せました。 スクリプトはまだまだ未熟なので、よろしくお願いします。 'エラーが発生しても次のステップに進むための宣言 On Error Resume Next 'FileSystemObjectオブジェクトを作成 Set objFS = CreateObject("Scripting.FileSystemObject") 'WScript.Shellオブジェクトを作成 Set objShell = CreateObject("WScript.Shell") 'ログファイルの作成 set strLog = objFS.CreateTextFile("C:\Errlog.log", True) 'フォルダコピー If objFS.FolderExists("c:\aaa") = False Then objFS.CreateFolder("c:\aaa") objFS.copyFolder "c:\aaa", "c:\bbb" If Err.Number <> 0 Then MsgBox(Err.Number & " " & Err.Description) End If strLog.WriteLine "コメント" Else objFS.copyFolder "c:\aaa", "c:\bbb" strLog.WriteLine "コメント" End If

  • ワイルドカードで指定してファイル削除

    あるフォルダの中の「abc」で始まるExcelファイルを全て削除したいです。 ※「abc」で始まるExcelファイルが無ければ何もしない FileExistsでワイルドカードは使えないのはわかっているのですが、 何か良い代替案は有りますでしょうか。 try~catchなど試してみましたが、期待通りの動作をしてくれないため、 ご教示お願いいたします。 function Delete(sTargetFolder){ var oFilesys = WScript.CreateObject("Scripting.FileSystemObject"); var str str = sTargetFolder + "\\abc*.xls"; if(oFilesys.FileExists(str)==true){ oFilesys.DeleteFile(str.true); }

  • excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか?

    excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか? 1.最初の処理 (1)A.xlsのファイルを開く (2)マクロ:2010.xlsのファイルを開く (3)マクロ:チェックのシートをA.xlsの明細のシートの前に追加 (4)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (5)マクロ:2010.xlsのファイルをディスクトップ上から削除 2.後から追加する処理 (6)B.xlsのファイルを開く (B.xlsは、A.xlsとは異なるフォルダを作成し、A.xlsの特定のセルの中身の名称でファイル名保存されます。名前が異なるだけでマクロの中身はA.xlsと同じ) (7)マクロ:2010.xlsのファイルを開く (8)マクロ:チェックのシートをB.xlsの明細のシートの前に追加 (9)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (10)マクロ:2010.xlsのファイルをディスクトップ上から削除 上記を対応する為に下記の様なマクロ((6)(7)の部分を抜粋)を設定しています。 '2010.xlsのファイルを開く(2010.xlsのファイルは適宜、ディスクトップにコピーされます) Workbooks.Open FileName:="C:\Documents and Settings\ID\デスクトップ\2010.xls" 'チェックのシートを現在のブックの明細の前にコピーする。 Windows("2010.xls").Activate Sheets("チェック").Copy before:=Workbooks(1).Sheets("明細") 単独でA.xlsやB.xlsのファイルが開かれている場合には、 上記の対応で問題ないのですが、A.xls、B.xls以外のexcelファイルが開かれていると、 実行時エラーが出てしまいます。 Workbooks(1)の部分で最初に開いたexcelのファイル名称を指定しているのが 影響しているのはわかるのですが、ここの処理をなんとかしたいというおもいです。 つまり、複数のexcelファイルが開かれていて、A.xlsやB.xlsのファイルを後から開いても エラーがでない様にするには、どの様な処理にしたらよいのか教えて頂きたく。 マクロを実行したexcelのファイル名を覚えておいて、その名前が(1)に置き換わる 様な処理が望まれる処理です。

  • VBA フォルダ内にファイルが存在するか確認したい

    OS: WindowsXP Office: 2003 ExcelVBAについて教えてください。 VBAで特定のフォルダー内でファイルが存在するかの確認をしたいのです。 例えば、以下のようなフォルダーに営業日がファイル名に付いた複数のファイルがあります。  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120201.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120202.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120203.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120206.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120207.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120208.xls 処理は20120201(2012年2月1日)から順番に行うのですが、その際、 報告書20120203.xlsはファイルが存在しているので変数1を返す。 報告書20120204.xlsは休日のためファイルが存在しないので変数0を返す。 次の処理で変数1の場合は処理をし、変数0の場合は処理を飛ばすと言った内容のマクロを考えています。 要はフォルダー内にファイルが存在するかしないかの部分のマクロ記述を知りたいのです。 どなたか、よろしくお願いします。

  • ディレクトリの存在有無の確認方法

    VB6を使っています。 ファイルの存在有無はFileSystemObjectを使って以下のような方法で確認しいますが、ディレクトリの存在有無はどのようにすれば、確かめられるでしょうか? Dim objFileSys As Object Set objFileSys = CreateObject("Scripting.FileSystemObject") If objFileSys.FileExists("C:ABC.XYZ") Then よろしくお願いします。

専門家に質問してみよう