ここから本文です

VBScriptを使って、カレントフォルダの特定の文字列を含むファイル名(フルパス)を...

woo********さん

2017/11/818:12:13

VBScriptを使って、カレントフォルダの特定の文字列を含むファイル名(フルパス)をテキストファイルの特定の文字列と置換する方法を教えてください。

例)
2017_A_1_a_C.avi
2017_A_2_b_D.avi
2017_B_1_c_C.avi
2017_B_2_d_D.avi

というファイルがあったとします。
ファイル名にAと1とCいう文字列が含まれているファイルを検索し、もしあれば、テキストファイル内のtest1の文字列をそのファイルのフルパスに置換する動作をさせたいです。

VBAなどであれば「*A*1*C*」などのワイルドカードで検索できますが、VBSではワイルドカードを使用できずRegEXPなども用いてみましたが、うまく動作しません。
ファイル名も文字数が同一ではないため、mid関数などで指定することも難しいです。

サンプルコードなどを記載いただけますと助かります。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
310
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

リクエストマッチ

2017/11/820:50:46

申し訳ございません、「テキストファイル内のtest1の文字列をそのファイルのフルパスに置換する」の意味が理解できないのですが・・・

以下の「VBScript」は、拡張子が「avi」で、ファイル名(ベースネーム「abc.avi」→「abc」)に「A」と「1」と「C」が存在したら、そのファイル名を表示させるだけのプログラムです。

プログラムファイルを、「~.avi」ファイル群が存在するフォルダに放り込んで、ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。

最後に「Finished!」と表示しますので、「OK」を押して、終了してください。

Option Explicit
Dim b, f, gf, so
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(".")
For Each f In gf.Files
If LCase(so.GetExtensionName(f.Name)) = "avi" Then
b = so.GetBaseName(f.Name)
If InStr(b, "A") > 0 and InStr(b, "1") > 0 and InStr(b, "C") > 0 Then
MsgBox(f.Name)
End If
End If
Next
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Set so = CreateObject("Scripting.FileSystemObject")

ファイルやフォルダを扱えるようにしています。

Set gf = so.GetFolder(".")

プログラムファイルの存在するフォルダを取得しています。

For Each f In gf.Files

プログラムファイルが存在するフォルダ内のすべてのファイルを処理。

If LCase(so.GetExtensionName(f.Name)) = "avi" Then

「LCase()」は、英字を小文字にする関数です。

これで、「Avi」や「AVI」も、すべて「avi」になります。

b = so.GetBaseName(f.Name)

ベースネーム(「abc.avi」→「abc」)を「b」に代入しています。

If InStr(b, "A") > 0 and InStr(b, "1") > 0 and InStr(b, "C") > 0 Then

もし、そのベースネームに、「A」かつ「1」かつ「C」が存在したら(正規表現ではなく、「InStr()」で対応しています)。

MsgBox(f.Name)

そのファイル名を表示しています。

End If
End If
Next

を、プログラムファイルが存在するフォルダ内のすべてのファイルで繰り返しています。

Set gf = Nothing
Set so = Nothing

「Set~」した変数は、「Nothing」で解放しておきます。

MsgBox("Finished!")

最後に「Finished!」と表示しています。

質問した人からのコメント

2017/11/9 13:18:04

lin_nyan36さんに記載いただいたコードをこちらの環境に直して動作させたところ、期待している動作を実現できました。

各コマンドの意味までご説明いただきありがとうございます。

感謝いたします。

ベストアンサー以外の回答

1〜1件/1件中

meg********さん

2017/11/904:34:06

>ファイル名にAと1とCいう文字列が含まれているファイルを検索

これは順番は関係ないのでしょうか?

>VBAなどであれば「*A*1*C*」などのワイルドカードで検索

この一文が引っ掛かります

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる