aフォルダ
********************
01
02
03
04
・
・
k
********************
aフォルダには01~n番までフォルダがあります
各々のフォルダの中にはb.htmlファイルが入っているのですが
以下のVBSスクリプトを01~n番まで当てはめれるようなスクリプトに書き換えてください
hoge.vbs
********************
Dim objFile ' 対象ファイル
Dim oldText ' 置換前テキスト
Dim newText ' 置換後テキスト
Dim objFSO ' ファイルシステムオブジェクト
Dim objRep ' 正規表現オブジェクト
Dim repText ' 置換後文字列
Dim objPath
Set objPath = CreateObject("Scripting.FileSystemObject").GetFolder(".")
Set objPath2 = CreateObject("Scripting.FileSystemObject").GetFolder("..")
p = right(objPath,len(objPath) - len(objPath2) -1)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("01/b.html")
oldText = objFile.ReadAll
repText = "<img src = ""01/"
Set objRep = New RegExp
objRep.Multiline = True
objRep.Pattern = "<img src = """
objRep.Global = True
newText = objRep.replace(oldText, repText)
objFile.Close
Set objFile = objFSO.CreateTextFile("01.html")
objFile.WriteLine (newText)
objFile.Close
********************
以下、サンプルです。
対象フォルダは 01~n番 というわけではなく、カレントディレクトリ直下のサブディレクトリを対象としてます。
b.html が存在しない場合などで、エラーになるかもしれません。
' File : ChangePathName.vbs ' Usage : CScript ChangePathName.vbs Option Explicit Call Main() Sub Main() Dim fso ' ファイルシステムオブジェクト Set fso = CreateObject("Scripting.FileSystemObject") Dim folder Set folder = fso.GetFolder(".") Dim subFolder For Each subFolder In folder.SubFolders WScript.Echo "[" & subFolder.Name & "] フォルダを処理中です。" Call ChangePathName( fso, subFolder.Name ) Next End Sub Sub ChangePathName( fso, strFolderName ) Dim file ' 対象ファイル Dim file2 ' 書き込み先ファイル Dim re ' 正規表現オブジェクト Dim strOldText ' 置換前テキスト Dim strNewText ' 置換後テキスト Dim strFind ' 検索文字列 Dim strReplace ' 置換文字列 Set file = fso.OpenTextFile( strFolderName & "/b.html") strOldText = file.ReadAll strFind = "<img src = """ strReplace = "<img src = """ & strFolderName & "/" Set re = New RegExp re.Multiline = True re.Pattern = strFind re.Global = True strNewText = re.Replace(strOldText, strReplace) file.Close Set file2 = fso.CreateTextFile( strFolderName & ".html") file2.WriteLine (strNewText) file2.Close End Sub
実行前のフォルダ構成
C:\home\edu\hatena\takanii\1362497323 └─a │ ChangePathName.vbs ├─01 │ b.html ├─02 │ b.html └─03 b.html
実行方法。コマンドプロンプトにて以下を実行。
(フォルダが C:\home\edu\hatena\takanii\1362497323\a である場合)
C:\> CD C:\home\edu\hatena\takanii\1362497323\a [Enter] C:\home\edu\hatena\takanii\1362497323\a> CScript ChangePathName.vbs [Enter] Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. [01] フォルダを処理中です。 [02] フォルダを処理中です。 [03] フォルダを処理中です。 :
実行後のフォルダ構成。
C:\home\edu\hatena\takanii\1362497323 └─a │ ChangePathName.vbs │ 01.html │ 02.html │ 03.html ├─01 │ b.html ├─02 │ b.html └─03 b.html
Dim objFile ' 対象ファイル Dim oldText ' 置換前テキスト Dim newText ' 置換後テキスト Dim objFSO ' ファイルシステムオブジェクト Dim objRep ' 正規表現オブジェクト Dim repText ' 置換後文字列 Dim objPath Set objPath = CreateObject("Scripting.FileSystemObject").GetFolder(".") Set objPath2 = CreateObject("Scripting.FileSystemObject").GetFolder("..") p = right(objPath,len(objPath) - len(objPath2) -1) Set objFSO = CreateObject("Scripting.FileSystemObject") for a=1 to 99 b=right(cstr(100+a),2) If objFso.FolderExists(objPath & "\" & b) Then Set objFile = objFSO.OpenTextFile(b & "/b.html") oldText = objFile.ReadAll repText = "<img src = """ & b & "/" Set objRep = New RegExp objRep.Multiline = True objRep.Pattern = "<img src = """ objRep.Global = True newText = objRep.replace(oldText, repText) objFile.Close Set objFile = objFSO.CreateTextFile( b & ".html") objFile.WriteLine (newText) objFile.Close end if next
質問にあるソースをそのまま
>01~n番まで当てはめれるようなスクリプトに
書き換えました。
ちなみに 01からなので2桁ということで 最大99番までを想定しています。
for a=1 to 99
の 99を 99以下にしてもらってもいいです。
hogeという フォルダがなかったら作成してください。
あと
Set objFile = objFSO.CreateTextFile( objPath & "\hoge\" & b & ".html")
こちらでした。
ちょっと間違えました。失礼しました。
aフォルダの中のhogeフォルダの中に生成したhtmlを入れたい場合
2013/03/06 02:01:56Set folder = fso.GetFolder(".")ここをどのようにいじればいいのでしょうか?
a\hoge フォルダに作成するようプログラムを修正しました。
(あと、フォルダ名が数値の場合のみを、対象とするよう修正しました。)
事前に a\hoge フォルダを作成した後、プログラム実行願います。
実行後のフォルダ構成。
2013/03/06 20:41:25