
はじめまして。
つい先日からvbsを勉強しはじめた者です。
質問内容が要領をえていないかもしれませんが、よろしくお願いいたします。
下記の内容をvbsで実行したいと思っているのですが、なかなかうまくいきません。
たとえば、aaaフォルダの中にさらにbbbやcccフォルダがあるとします。(実際はもっと多くのフォルダが存在します)
そのbbbやccc等の中にwordと一太郎のファイルがあります。
ファイル名が、
C:\aaa\bbb\bbbああ.doc(x)
C:\aaa\bbb\bbbああ①.doc
C:\aaa\bbb\bbbああ.jtd
C:\aaa\ccc\cccああ.jtd
C:\aaa\ccc\ccc①ああ.doc
C:\aaa\ddd\ddd①ああ.doc
だった場合に、「ああ」が含まれるファイルのみ削除したいと思っています。
Instr関数やRegExpを使えばいいのかなというところまではわかったのですが、
ファイル名をどう指定したらいいのか、また指定したファイルがあった場合のDeleteFileの書き方がいまいちわかりません。
もしよろしければ、ご教示いただけないでしょうか。
よろしくお願いします。

No.3ベストアンサー
- 回答日時:
以下のようにしてください。
(スクリプト名はsample.vbsとします)---------------------------------------
Option Explicit
Dim objFSO ' FileSystemObject
Dim objStartFolder ' 開始フォルダ
Dim objREG '正規表現
set objREG = New RegExp
objREG.Pattern = "(ああ|いい)"
' フォルダ検索関数
Sub FindFolder(ByVal objMainFolder)
Dim objSubFolder ' サブフォルダ
Dim objFile ' ファイル
'各ファイルを表示
For Each objFile In objMainFolder.Files
'WScript.Echo " " & objFile.Name
if objREG.Test(objFile.Name) then
WScript.Echo " " & objFile.Name & " 削除対象"
'objFSO.DeleteFile objFile.Path 'ファイル削除
End If
Next
'サブフォルダを処理
For Each objSubFolder In objMainFolder.SubFolders
WScript.Echo objSubFolder.Path
FindFolder objSubFolder
Next
End Sub
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objStartFolder = objFSO.GetFolder("c:\aaa")
WScript.Echo objStartFolder.Path
FindFolder objStartFolder
Set objStartFolder = Nothing
Set objFSO = Nothing
---------------------------------------------------------------------------
コマンドプロンプト(DOSプロンプト)で
sample.vbsの存在するフォルダに移動し
cscript sample.vbs
と入力すると
c:\aaa下の
フォルダ一覧と ああ又はいいの文字が含まれるファイル名を表示します。
表示されたファイル名が削除対象であることを確認してください。
次に、'objFSO.DeleteFile objFile.Path 'ファイル削除 の行がコメントになっていますので
そのコメントをはずしてしてください。
cscript sample.vbs と入力すると、前回と同じ内容が表示され実際にファイルが削除されます。
お返事が大変遅くなってしまい申し訳ありません。
試してみたところ、複数のファイルを削除することができました!
ファイルを検索して指定のファイルのみ削除する、こういう命令も色々な書き方や考え方があるんですね。
お二方のコードを動かしてみて、ただただ感動するばかりです。
複数のファイルを削除できましたので、 tatsu99様をベストアンサーにさせていただきます。
本当にありがとうございました。
No.2
- 回答日時:
たまたま見ていたら、こんな書き込みがありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
コードの以下にある、
fso.DeleteFile subFold.path
ここで削除の部分をコメントアウトしておけば、削除する一覧が出てきますから、それで、実際に「Run」するか決めればよいです。いきなり削除というわけにはいかないと思います。
それと、全部削除できるとは限らないような気がします。
以下は、Zipファイルの中まで検索しています。
また、正規表現も少し考えてみたけれども、ややこしさが深まります。
以下では、Msgbox msg または、 objText.WriteLine msg で出力するようにしています。
最終的には、コメントアウトを外して、fso.DeleteFile subFold.Pathを実行してください。
トラブルがあっても、こちらでは、責任を持てませんので、後は、よろしくおねがいします。
Option Explicit
Const BASEFOLDER ="C:\Temp\Test1\" '末尾は\をつけます
Const SEARCHPATTERN ="ああ"
Dim Re
Dim i, k, j
Dim msg, arg, FSO, oShell
Dim objRootDir
ReDim fns(100)
Dim objText
i = 1
If Right(BASEFOLDER, 1) <> "\" Then MsgBox BASEFOLDER & "の末尾に、' \ ' が抜けています。": WScript.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("Shell.Application")
If FSO.FolderExists(BASEFOLDER) =False Then
MsgBox BASEFOLDER & "が見つかりません。",64
WScript.Quit
End If
Set objRootDir = oShell.Namespace(BASEFOLDER)
i=0
Search objRootDir.Items.Item, i '
ReDim Preserve fns(k)
msg = Join(fns, Chr(13))
'WScript.echo msg
Set objText =FSO.CreateTextfile(BASEFOLDER &"DeleteFiles.Txt")
objText.WriteLine msg
objText.Close
Set FSO = Nothing: Set oShell = Nothing
WScript.Quit
Sub Search(arg , i )
Dim objItmes
Dim subFold
Dim fn
i = i + 1
If arg.IsFolder Then
Set objItmes = arg.GetFolder.Items
On Error Resume Next
For Each subFold In objItmes
If subFold.IsFolder Then
fol = subFold.Name
Else
fn = subFold.Name
'ファイル削除 (ここを工夫すべし)
If InStr(1,fn,SEARCHPATTERN,1)>0 Then
'fso.DeleteFile subFold.path 'ここで削除
k= k + 1
fns(k) = "-" & subFold.Path
End if
End If
Search subFold, i
Next
On Error GoTo 0
End If
End Sub
お返事が大変遅くなってしまい申し訳ありません。
試してみたところ、txtにリストが書き出され、削除もできました。
ここから「いい」ファイルも削除する場合、SERACHPATTERNをもう一つ増やすとできるのでしょうか?
恥ずかしながら、Constも初めて知りました。
vbsの勉強を始めたばかりですので、こんな風に教えてくださって、本当に助かりました。
このコードを参考にもっと知識を深めたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
これはc:\aaaを指定した時に、再帰的に全ファイルを検索して
「ああ」がファイル名に含まれるファイルを削除するという意味ですね?
かりにディレクトリ名に「ああ」が含まれる場合はディレクトリごと削除でしょうか?
それともファイル名にさえ入っていなければ無視でしょうか?
早速ありがとうございます。
>これはc:\aaaを指定した時に、再帰的に全ファイルを検索して
>「ああ」がファイル名に含まれるファイルを削除するという意味ですね?
はい、おっしゃるとおりです。
言葉足らずですみません…。
ディレクトリ名には「ああ」が含まれるものはありません。
今ちょうど試行錯誤しているところで気づいたのですが、もう1点追加事項ができましたので、補足コメントに書いておきます。
もしよろしければ、合わせてご教示願えないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
バッチファイルで、iniファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトでファイル...
-
コマンドプロンプトで変数が数...
-
[DOS] コピー先に同じファイル...
-
ExcelVBAのDirでスペース含むフ...
-
バッチコマンドでファイル名の...
-
.batでファイル名から抽出して...
-
フォルダ内の更新日時が一番新...
-
ファイル名の頭5桁と同名のフォ...
-
aタグのhrefにネットワークパス...
-
スタートアップのファイルをバ...
-
【Access】エクスポート時のフ...
-
バッチファイルで同一フォルダ...
-
【vbs】ファイル名の検索と該当...
-
ファイル名を一括してリネーム...
-
VB6.0 Dir関数について
-
ファイル名を該当フォルダ内か...
-
コマンドでファイルコピーする...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
[DOS] コピー先に同じファイル...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトで変数が数...
-
ExcelVBAのDirでスペース含むフ...
-
ファイル名の頭5桁と同名のフォ...
-
フォルダ内の更新日時が一番新...
-
サブフォルダからファイルをコ...
-
バッチコマンドでファイル名の...
-
access,vbaでフォルダ内のファ...
-
ファイル名を一括してリネーム...
-
スタートアップのファイルをバ...
-
VBA GetAttrについて教えてくだ...
-
aタグのhrefにネットワークパス...
-
【DOSバッチ開発】末尾のタブの...
-
.batでファイル名から抽出して...
-
word VBA ファイル名 保存
-
Windowsコマンドプロンプトで、...
おすすめ情報
上記で書いておりますファイル名のほかに、ファイル名に「いい」が含まれるものも削除したいです。
C:\aaaフォルダ下の各フォルダ内にある「ああ」「いい」がファイル名に含まれるファイルをすべて削除したいです。
例)
C:\aaa\bbb\bbbああ.doc(x) → 削除したい
C:\aaa\bbb\bb123.doc(x) → 削除したくない
C:\aaa\bbb\bbbいい.doc(x) → 削除したい
C:\aaa\ccc\cccいい.jtd → 削除したい
C:\aaa\ddd\12345.jtd → 削除したくない