大山くんより「どれだけ大変な思いをしながらやってきたのかを隠さずに、昔のレポートも全部公開しておくべし!」という指摘があり、しぶしぶ昔のレポートをサーバーに上げました。
UPしたURLは↓です
http://mizunarano-mori.info/members_only/blog/pplog.php

ところが、当初作成したときのフォルダのパスが異なってしまっているので、画像が表示されなかったり、PHPがちゃんと動作しない箇所がでてきてしまいました。
ファイルの中身を調べてみると、URLがやはり違う場所を指してしまっています。
現状のアドレスに合うように、これらをひとつひとつ全部修正すればちゃんと動くようになるのですけど、ファイルの数は3000個近くあります。
3000個近いファイルをひとつひとつテキストエディタで開いて手作業で修正するには、膨大な時間と労力を要しますし、今後同じような修正をしなくちゃならない場合も出てくるかもしれません。
んで、誠に不本意ながらもお遊びで「仕事で使っているワザ」をちょっとだけ使っちゃいました。
休みの日にまでこんなことやりたくねーよ...(Θ。Θ)
WSHとはWindowsスクリプティングホストの略で、Windows上でJavaScriptやVBScriptで記述されたスクリプトを実行するためのソフトウェアです。パソコンのOSがWindowsだったら標準で装備されています。
今回はバッチファイルでVBScriptで書いたプログラム本体を呼んで処理を実行するというスクリプトを書きました。
■起動方法
changedir.bat [検索フォルダ名] [検索対象語句] [置換語句]
■引数の意味
[検索フォルダ名] 入力したフォルダ配下にある全ファイルを検索します。
[検索対象語句] ファイルの中に記述されている語句のうち、違う語句に置き換えたい語句
[置換語句] 検索対象語句から置き換えたい語句
■対象ファイル
*.php,*.html,*.shtml,*.xml,*.rdf,*.tmp
※かなり汎用性が高いですけど、上記の拡張子にしか対応させていません。
興味のある方は、自分でどんどん書いてみてはいかがでしょうか?
WSHやVBScriptの詳細についてはMSDN Library http://www.microsoft.com/japan/msdn/ に掲載されています。
■repchr.bat
SETLOCAL
@ECHO 一括置換バッチファイル
@CALL cscript repchr.vbs %1 %2 %3
■repchr.vbs
option explicit
If WScript.Arguments.Count > 3 Or WScript.Arguments.Count < 3 Then
WScript.StdOut.WriteLine "パラメータの数が合ってません"
WScript.StdOut.WriteLine "使用方法"
WScript.StdOut.WriteLine "changedir.bat [検索フォルダ名] [検索対象語句] [置換語句]"
WScript.Quit(1)
End If
Dim sPh,sPr,repP,regP
sPh = WScript.Arguments(0)
regP = WScript.Arguments(1)
sPr = WScript.Arguments(1)
repP = WScript.Arguments(2)
Call prcMkReg
Call prcRepFiles
WScript.Quit(0)
Private Sub prcMkReg()
Dim c,tmpS
c = 0
For c = 1 To Len(sPr)
If Mid(sPr,c,1) = "/" Or Mid(sPr,c,1) = ":" Then
tmpStr = tmpS & "\" & Mid(sPr,c,1)
Else
tmpS = tmpS & Mid(sPr,c,1)
End If
Next
regP = tmpS & ".*"
End Sub
Private Sub prcRepFiles()
Dim wSh,wEx,pLst
Set wSh = CreateObject("WScript.Shell")
Set wEx = wSh.exec("%ComSpec% /c ""dir /S /B " & sPh )
pLst = wEx.StdOut.ReadAll
Set wEx = Nothing
Set wSh = Nothing
Dim pAr,aC,tPath
pAr = Split(pLst,vbCrLf)
aC = 0
Dim rEx, mT, mTes
Set rEx = New RegExp
rEx.Pattern = "(?:\.php|\.html|\.shtml|\.xml|\.rdf|\.tmpl)$"
rEx.IgnoreCase = True
rEx.Global = True
For aC = LBound(pAr) To UBound(pAr)
tPath = pAr(aC)
Set mTes = rEx.Execute(tPath)
For Each mT in mTes
WScript.StdOut.WriteLine tPath
Call prcRepP(tPath)
Exit For
Next
Next
Set rEx = Nothing
End Sub
Private Sub prcRepP(ByVal cP)
Err.Number = 0
Dim oFs,oF
Set oFs = CreateObject("Scripting.FileSystemObject")
Set oF = oFs.OpenTextFile(cP,1,False)
If Err.Number > 0 Then
Exit Sub
End If
Dim rEx, mT, mTes
Set rEx = New RegExp
rEx.Pattern = sPr
rEx.IgnoreCase = True
rEx.Global = True
Dim tL,wStr,repFlg,cnt
wStr = ""
cnt = 0
repFlg = False
Do Until oF.AtEndOfStream
tL = oF.ReadLine
Set mTes = rEx.Execute(tL)
For Each mT in mTes
repFlg = True
tL = Replace(tL,sPr,repP)
Next
wStr = wStr & tL & vbCrLf
Loop
oF.Close
Set oF = Nothing
Set oFs = Nothing
If repFlg = True Then
Call prcReplaceFile(cP,wStr)
End If
End Sub
Private Sub prcReplaceFile(ByVal cP, ByVal wStr)
Err.Number = 0
Dim oFs1,oF1
Set oFs1 = CreateObject("Scripting.FileSystemObject")
If oFs1.FileExists(cP & ".sv") = True Then
Dim oFs2, oF2
Set oFs2 = CreateObject("Scripting.FileSystemObject")
Set oF2 = oFs2.GetFile(cP & ".sv")
oF2.Delete
Set oFs2 = Nothing
Set oF2 = Nothing
End If
Set oF1 = oFs1.GetFile(cP)
oF1.Move cP & ".sv"
If Err.Number > 0 Then
Exit Sub
End If
Set oF1 = Nothing
Set oFs1 = Nothing
Dim oFs3,oF3
Set oFs3 = CreateObject("Scripting.FileSystemObject")
Set oF3 = oFs3.OpenTextFile(cP, 2, True)
If Err.Number > 0 Then
Exit Sub
End If
oF3.WriteLine wStr
oF3.Close
Set oF3 = Nothing
Set oFs3 = Nothing
Dim oFs4, oF4
Set oFs4 = CreateObject("Scripting.FileSystemObject")
Set oF4 = oFs4.GetFile(cP & ".sv")
oF4.Delete
Set oFs4 = Nothing
Set oF4 = Nothing
End Sub
※ご注意
{{{
本スクリプトの使用は無償としますが、再配布の際は著作権情報を明記してください。
⇒ (c)2008 mizunarano-mori.info
本スクリプトの使用によって生じた如何なる損害に対する責任は使用したご本人が負うものとします。
