例
ABC.html (<title>XXX</title>)→ A.html(<title>ABC</title>)
DEF.html (<title>XXX</title>)→ A.html(<title>DEF</title>)
何がしたいかというとhttp://q.hatena.ne.jp/1134551356 にある質問のちょうど逆で
htmlファイル内にあるタイトルタグをファイル名に書き換えたいのです。
共通の文字(XXX)を変換の際に指定できるように(つまり応用が効くように)作成してくれた方には2500P
タイトルタグの変換のみの場合は2000Pのお礼をします。
一番使いやすいソフトを作成してくれた人にお礼をさせて下さい。
宜しくお願い致します。
動作環境はwindows7 64bit です。よろしくお願いします。
書きミスしていました
誤
ABC.html (<title>XXX</title>)→ A.html(<title>ABC</title>)
DEF.html (<title>XXX</title>)→ A.html(<title>DEF</title>)
正
ABC.html (<title>XXX</title>)→ ABC.html(<title>ABC</title>)
DEF.html (<title>XXX</title>)→ DEF.html(<title>DEF</title>)
またABC.html のファイル名はローマ字ではなく日本語です。
VBScript で作成いたしました。
デスクトップのアイコンに、変換したいファイル(複数可能)か、変換したいファイルがあるフォルダをドラッグ&ドロップしてください。
文字の書き換えが完了すると、「文字の変換が終了しました。」というメッセージが表示されます。
ファイルの内容を書き換えてしまうので、念のため、バックアップを取ってからお使いください。
プログラムでは、ファイルの拡張子が、.html、.HTML、.htm、.HTM のどれかになっているものを変換対象にするようにチェックしています。
フォルダではなく、複数のファイルをドラッグ&ドロップするときには、ひとつ注意点があります。
Windows の制限として、扱える長さが決まっています。
置き換えるファイルがたくさんあるようですから、ファイルを選ぶのはお試し程度にして、全部置き換えるときには、フォルダをドラッグ&ドロップするようにしてください。
置換対象の文字列として、「平尾小学校」を変えたくなった場合には、ソースの一番最初の行の平尾小学校を書き換えてください。
strTarget = "平尾小学校" Set objRegExp = New RegExp objRegExp.Pattern = strTarget objRegExp.Global = True Set objRegExpFile = New RegExp objRegExpFile.Pattern = "\.html?$" objRegExpFile.IgnoreCase = True Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFS = WScript.CreateObject("Scripting.FileSystemObject") Sub ChangeFileImp(objFile) If Not objRegExpFile.Test(objFile.Name) Then Exit Sub End If Set objStream = objFile.OpenAsTextStream(1) contents = objStream.ReadAll() objStream.Close() Set objStream = objFile.OpenAsTextStream(2) objStream.Write objRegExp.Replace(contents, objRegExpFile.Replace(objFile.Name, "")) objStream.Close() End Sub Sub ChangeFile(objFileName) Set objFile = objFS.GetFile(objFileName) ChangeFileImp(objFile) End Sub Sub ChangeFolder(objFolderName) Set objFolder = objFS.GetFolder(objFolderName) for each objFile in objFolder.Files ChangeFileImp(objFile) next End Sub Set objArgs = WScript.Arguments For i = 0 to objArgs.Count - 1 if (objFS.FolderExists(objArgs(i))) then ChangeFolder(objArgs(i)) elseif (objFS.FileExists(objArgs(i))) then ChangeFile(objArgs(i)) end if Next MsgBox "文字の変換が終了しました。"
どちらかというと回答というより自分の興味で書いてみました。
Unix系なら大抵動くかなと。
【!注意!】ファイルを丸ごと書き換えてしまいますので、実際やるときは安全なところで実験してから、バックアップをとったうえで実行してください。
@下ごしらえ
対象ファイル群がある一番上のフォルダで
vi ./convX
として以下を作成。
#!/bin/sh
fname=`basename $3 $2`
sed -i "s/$1/$fname/g" $3
それの権限を変更。
chmod 755 ./convX
@変換実行
*.htmlファイル群内の文字列XXXをファイル名から.htmlを抜いた部分で置換する場合は以下。複数個XXXがあればそれら全部置換対象(XXXXといった感じの場合は先頭の合致する箇所が対象)。
find . -name "*.html" -exec ./convX XXX .html {} \;
すみません、プログラムの知識が全くないため全くわかりません・・・。
でも考えて下さりありがとうございます。
VBScriptで作成しました。
下記のコード部分をコピーし、メモ帳を開いて貼り付け、
対象となるHTMLが保存されたフォルダに「HTML.vbs」という名前で保存します。
HTML.vbsをダブルクリックすると、フォルダ内のHTMLファイルを変換します。
変換が終わると「変換完了」と表示されます。
※ファイルを書き換える為、HTMLファイルは必ずバックアップを取ってください。
※文字のエンコードなどで、うまくいかない事があるかもしれません。
不明な点は状況をお知らせください。
Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFS = WScript.CreateObject("Scripting.FileSystemObject") Set objFList = objFS.GetFolder(objWshShell.CurrentDirectory) For Each objFile In objFList.Files If Right(objFile.Name, 5) = ".html" Then Set oTF = objFS.OpenTextFile(objFile.Name) tmp = oTF.ReadAll oTF.Close tmp = replace(tmp,"<title>XXX</title>","<title>" & Left(objFile.Name,Len(objFile.Name) - 5) & "</title>") Set oTF = objFS.OpenTextFile(objFile.Name, 2) oTF.Write tmp oTF.Close End If Next MdgBox "変換完了"
修正中でしたが、質問を終了されたようなので、
補足分の回答も取り止めておきますね。
返信不要です。
すみません!作っていただいたソフトがうまくいって嬉しくて勢いでポイント配布してしまいました。
修正していただいていたみたいで不義理なことしてしまい申し訳ありません・・・
今後は期限を決めてこのようなことがないようにします。
本当にすみませんでした。
GrepReplaceを使えばできると思います。
dHive::DH-APPLI - 株式会社ドリームハイブのアプリケーション配信サイト
コーディングやサイト修正時に便利すぎる一括置換ツールGrep Replace|SEOまとめ
D&Dで対象ディレクトリを指定できます。
使い方はこれから調べます。
あーでもファイル名を置換文字として設定できなさそうでした。
凡ミスすみません…。
後出しですみません。もうちょっと具体例を書くと
東通り.html
~
<meta name="robots" content="index,follow">
<meta name="Description" content="大正地区平尾小学校の年間行事を示します">
<meta name="Keywords" content="平尾小学校の周辺">
<title>大正地区 - 平尾小学校</title>
<h1>平尾小学校周辺の地図では~~~~</h1>
~
中央北側通り.html
~
<meta name="robots" content="index,follow">
<meta name="Description" content="大正地区平尾小学校の年間行事を示します">
<meta name="Keywords" content="平尾小学校の周辺">
<title>大正地区 - 平尾小学校</title>
<h1>平尾小学校周辺の地図では~~~~</h1>
~
ここで置換文字を「平尾小学校」に指定しファイル名にしたいんです。
東通り.html
~
<meta name="robots" content="index,follow">
<meta name="Description" content="大正地区東通りの年間行事を示します">
<meta name="Keywords" content="東通りの周辺">
<title>大正地区 - 東通り</title>
<h1>東通り周辺の地図では~~~~</h1>
~
中央北側通り.html
~
<meta name="robots" content="index,follow">
<meta name="Description" content="大正地区中央北側通りの年間行事を示します">
<meta name="Keywords" content="中央北側通りの周辺">
<title>大正地区 - 中央北側通り</title>
<h1>中央北側通り周辺の地図では~~~~</h1>
~
よろしくお願いします。
VBScript で作成いたしました。
デスクトップのアイコンに、変換したいファイル(複数可能)か、変換したいファイルがあるフォルダをドラッグ&ドロップしてください。
文字の書き換えが完了すると、「文字の変換が終了しました。」というメッセージが表示されます。
ファイルの内容を書き換えてしまうので、念のため、バックアップを取ってからお使いください。
プログラムでは、ファイルの拡張子が、.html、.HTML、.htm、.HTM のどれかになっているものを変換対象にするようにチェックしています。
フォルダではなく、複数のファイルをドラッグ&ドロップするときには、ひとつ注意点があります。
Windows の制限として、扱える長さが決まっています。
置き換えるファイルがたくさんあるようですから、ファイルを選ぶのはお試し程度にして、全部置き換えるときには、フォルダをドラッグ&ドロップするようにしてください。
置換対象の文字列として、「平尾小学校」を変えたくなった場合には、ソースの一番最初の行の平尾小学校を書き換えてください。
strTarget = "平尾小学校" Set objRegExp = New RegExp objRegExp.Pattern = strTarget objRegExp.Global = True Set objRegExpFile = New RegExp objRegExpFile.Pattern = "\.html?$" objRegExpFile.IgnoreCase = True Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFS = WScript.CreateObject("Scripting.FileSystemObject") Sub ChangeFileImp(objFile) If Not objRegExpFile.Test(objFile.Name) Then Exit Sub End If Set objStream = objFile.OpenAsTextStream(1) contents = objStream.ReadAll() objStream.Close() Set objStream = objFile.OpenAsTextStream(2) objStream.Write objRegExp.Replace(contents, objRegExpFile.Replace(objFile.Name, "")) objStream.Close() End Sub Sub ChangeFile(objFileName) Set objFile = objFS.GetFile(objFileName) ChangeFileImp(objFile) End Sub Sub ChangeFolder(objFolderName) Set objFolder = objFS.GetFolder(objFolderName) for each objFile in objFolder.Files ChangeFileImp(objFile) next End Sub Set objArgs = WScript.Arguments For i = 0 to objArgs.Count - 1 if (objFS.FolderExists(objArgs(i))) then ChangeFolder(objArgs(i)) elseif (objFS.FileExists(objArgs(i))) then ChangeFile(objArgs(i)) end if Next MsgBox "文字の変換が終了しました。"
素晴らしい!うまくいきました!これで作業がかなり楽になりますありがとうございます!
大量のポイントありがとうございます。
お役にたてたようで、幸いです。
素晴らしい!うまくいきました!これで作業がかなり楽になりますありがとうございます!
2012/09/18 18:02:21大量のポイントありがとうございます。
2012/09/19 01:17:22お役にたてたようで、幸いです。