人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBSの質問です
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
********************

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● cx20

以下、サンプルです。
対象フォルダは 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

takaniiさんのコメント
aフォルダの中のhogeフォルダの中に生成したhtmlを入れたい場合 Set folder = fso.GetFolder(".")ここをどのようにいじればいいのでしょうか?

cx20さんのコメント
a\hoge フォルダに作成するようプログラムを修正しました。 (あと、フォルダ名が数値の場合のみを、対象とするよう修正しました。) 事前に a\hoge フォルダを作成した後、プログラム実行願います。 >|vb| ' 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 strTargetName ' 対象フォルダ名 Dim strInputFileName ' 入力ファイル名 Dim strOutputFileName ' 出力ファイル名 Dim subFolder For Each subFolder In folder.SubFolders strTargetName = subFolder.Name ' フォルダ名が数字の場合、処理対象とする If IsNumeric( strTargetName ) Then strInputFileName = subFolder & "\b.html" strOutputFileName = folder.Path & "\hoge\" & strTargetName & ".html" WScript.Echo "[" & strTargetName & "] フォルダを処理中です。" Call ChangePathName( fso, strTargetName, strInputFileName, strOutputFileName ) End If Next End Sub Sub ChangePathName( fso, strTargetName, strInputFileName, strOutputFileName ) Dim file ' 対象ファイル Dim file2 ' 書き込み先ファイル Dim re ' 正規表現オブジェクト Dim strOldText ' 置換前テキスト Dim strNewText ' 置換後テキスト Dim strFind ' 検索文字列 Dim strReplace ' 置換文字列 Set file = fso.OpenTextFile( strInputFileName ) strOldText = file.ReadAll strFind = "<img src = """ strReplace = "<img src = """ & strTargetName & "/" Set re = New RegExp re.Multiline = True re.Pattern = strFind re.Global = True strNewText = re.Replace(strOldText, strReplace) file.Close Set file2 = fso.CreateTextFile( strOutputFileName ) 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 └─hoge 01.html 02.html 03.html ||<

2 ● きゃづみぃ
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以下にしてもらってもいいです。


きゃづみぃさんのコメント
>aフォルダの中のhogeフォルダの中に生成したhtmlを入れたい場合 >|vb| Set objFile = objFSO.CreateTextFile( b & ".html") ↓ Set objFile = objFSO.CreateTextFile( objPath2 & "\hoge\" & b & ".html") ||<

takaniiさんのコメント
変換して実行してみましたが パスが見つかりませんと出ます

きゃづみぃさんのコメント
hogeという フォルダがなかったら作成してください。

きゃづみぃさんのコメント
あと >|vb| Set objFile = objFSO.CreateTextFile( objPath & "\hoge\" & b & ".html") ||< こちらでした。 ちょっと間違えました。失礼しました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ