2017-03-21 8 views
1

何百もの.htmファイルがあります。彼らはすべての異なるだが、それらすべての共有終わり近くに同様のリンク:バッチ:インタースティシャル文字列を検索して同じ行にHTMLタグを連結

<a href="123-04.htm">Please Consult 345.</a> 

「123から04」のファイル名と「345」は、セット内のすべての.htmのファイル間で異なるかもしれませんが、 「ご相談ください」は常に同じです。

<a name="Tag"></a><a href="123-04.htm">Please Consult 345.</a> 

I:

は、だから私は、次の生成するために、文字列「相談してください」と、その各ファイルで発生する行の先頭に<a name="Tag"></a>を追加するために、すべての.htmファイルを検索しますいくつかのことを試しました。最初に文字列を見つけることができるfindstrを使っていましたが、行番号を正確に報告することはできませんでした。これは常に1行目を報告します。読んだところでは、これは.htmファイルがUNIXであるためだと思います。私はそれがどういう意味か分かりませんが、findstrと干渉することを読んでいます。もう一度、初心者、私の謝罪。

このサイトで見つけた解決策に基づいて、for /fを使用してファイルをステップしたサンプルスクリプトを作成しましたが、私は何かに気づいたと思いますが、どうか "見てください" "文字列、それは行の中央にあるためです。区切り文字やトークンの指定に使用できるものはありません。スクリプトをコピーし、新しいファイルへのすべての行、それはステッピングている間、それは特定の文字列を見つけた場合、それは新しいテキストファイルにその行の下に別の文字列を挿入します:

@echo off 
setlocal enabledelayedexpansion 

for /f %%x in (sample.txt) do (
    set line=%%x 
    echo %%x>>newfile.txt 
    call :ADD 
) 

:ADD 
if /I "!line!"=="1" (
echo inserttext>>newfile.txt 
) 

sample.txtのはわずか10が含まれています各行にはそれぞれ独自の番号(1〜10)があります。これはもちろんのことですが、私は概念の証明で道を始めると思いますが、それは私に必要なものではありません。私はIF文がワイルドカードを使っていないことを知っているので、これを調べるための正しい方法はわからない。検索する必要がある文字列は、サンプルのように最初の行ではなく、行の中央にある。TXT。

言うまでもなく、私は立ち往生しています。私はこれをバッチに入れましたが、PowerShellや、Windows上で本質的に利用可能な何かを使用することができます。これは仕事のためのものなので、特別なものを手に入れるのは簡単ではありません。これがMATLABやFORTRANなのか、これまでに広範囲に使用していたものなのか分かりましたが、利用できるツールは十分に知識がありません。私は詳細な質問を提供し、既に存在する答えを見つけようとした私の試みにデュー・ディリジェンスを示してくれることを願っています。

+0

」は固定文字列か「タグ」は「123-04.htm」ですか? – pandemic

+0

あなたは実際に「私はいくつか試しました」という文を使って試したことを説明しました。 +1だけ。 – SomethingDark

+0

HTML操作にバッチスクリプトを使用しないことをお勧めします。ネイティブにHTMLを処理できる言語を使用する。 Windowsの 'cmd' /バッチはHTMLを通常のテキストファイルとして扱うので、データ構造が中断する可能性があります。 – aschipfl

答えて

0

レスキューへの正規表現!

$input = Get-Content InputFile.txt 
$input -replace '(<a.*?>.*?Please Consult.*?<\/a>)','<a name="Tag"></a>$1' | Out-File OutputFile.txt 

基本的な考え方:

正規表現'(<a.*?>.*?Please Consult.*?<\/a>)'マッチ単語を含むすべての<a></a>タグが

「を参照してください」正規表現.*?は、本質的に怠惰な任意のテキストを一致さ(つまり、あなた一度ブラケットを打つ、止める)。最後に()の角かっこでは、置換に使用する「マッチグループ」が作成されます。

次の部分:'<a name="Tag"></a>$1'が置換テキストです。

<a name="Tag"></a>と置き換えてから、一致グループの内容である$1が続きます。 (つまり、何があったのか)。

PowerShellをもう少し追加することで、ファイルを繰り返し処理し、必要に応じて置換を自動化することができます。

+0

その " - 置き換え"の行は私を救ったものでした。私は他の場所で見つけたいくつかの他のfind-replace-loopコードと一緒にそれをまとめることができました。完璧に動作します。どうもありがとうございます。 – rbarba

関連する問題