2017-04-13 4 views
1

バッチでHTMLを操作しています。遅延拡張を使用していますが、二重引用符でセミコロンが見つかった場合、スクリプトはセミコロンを含めて何もコピーしません。enableDelayedExpansionを使用してバッチファイル内のセミコロンを引用符で囲むことはできません

それはおそらく私が(私はラベルで分離されたものを維持するを必要putLineInHTMLFileラベルに変数を渡すとき、私は二重引用符を使用するという事実によるものです。

@echo off 
setlocal enableDelayedExpansion 
del output.html 
for /f "delims=" %%x in (file.html) do call :putLineInHTMLFile "%%x" 
goto :EOF 
:putLineInHTMLFile 
set "line=%~1" 
echo !line!>> output.html 

file.htmlは含まれています

<tag1> 
<tag"bla;2"> 

スクリプトを実行した後、output.htmlは含まれています。私が試した

<tag1> 
<tag"bla 

^^ ^かとセミコロンをエスケープ。うまくいきませんでした。私も二重引用符をエスケープしようとしました。それはどちらもうまくいかなかった。

file.htmlの内容を変更することができます。とにかく、そのセミコロンを出力ファイルに含めることができます。

答えて

2

これはテストケースの場合に有効です。普及のための保証:

@echo off 
setlocal enableDelayedExpansion 
del output.html 
for /f "delims=# tokens=*" %%x in (file.html) do (
     set "safe=%%x" 
     set "safe=!safe:"=""!" 
     call :putLineInHTMLFile "!safe!" 
) 
goto :eof 
:putLineInHTMLFile 
set "line=%~1" 
set "line=%line:""="%" 
echo !line!>> output.html 
:eof 

forコマンドの「身体」の中で、%%xは、この問題が発生したcallコマンドで処理する場合にのみ、それはだ、分割化されていません。これを防ぐために、私はsafeを使って文字列中のすべての二重引用符を二重にし、サブルーチンに行を追加してもう一度それらを取り除きました。

二重引用符が一致しない場合、これは正しく機能しませんが、そのような場合には、セミコロンが存在しない場合でも末尾の>のエコーは起きません。このメソッドは、入力ラインに(偶数)限り、引用符が一致するよう、すべてのケースで動作

1

確かに。問題は、サブルーチンが

"< タグ" BLAを受信することである。2 ">" その行の

;のようなスペースは、セパレータであるため、 ">" 2

を: "< タグ" BLA
Token2:パーサはその

としてTOKEN1見て

サブルーチン内で何をしようとしているのかわからず、問題を回避する方法をアドバイスするのは難しいです。


@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q43391363.txt" 
SET "outfile=%destdir%\outfile.txt" 
SET "outfile2=%destdir%\outfile2.txt" 
del "%outfile%" 
del "%outfile2%" 

(for /f "delims=" %%x in (%filename1%) do set "line=%%x"&call :putLineInHTMLFile "%%x")>"%outfile2%" 
goto :eof 

:putLineInHTMLFile 
ECHO %* 
echo !line!>>"%outfile%" 

GOTO :EOF 

あなたの状況に合わせてsourcedirdestdirの設定を変更する必要があります。 テスト用にデータが入っているq43391363.txtというファイルを使用しました。 outfile1への直接従来の出力とoutfile2にサブルーチンから他の使用したリダイレクトを使用して、2つの異なる方法、1をここだ -

だから%OUTFILE%および%指定の出力ファイル%

として定義されたファイルを生成します。

+0

私はフッターとヘッダーを含む2つの他のHTMLファイルを含む複数の他のソースからHTMLファイルを構築しています。セミコロンから逃れることはできますか?フッターとヘッダーの「HTML」ファイルは、実際にはHTMLではないので変更できます。それらは私が望むように私が操作できるテキストです。 – Axonn

1

@echo off 
setlocal enableDelayedExpansion 
del output.html 
for /f "delims=" %%x in (file.html) do call :putLineInHTMLFile "%%x" 
goto :EOF 

:putLineInHTMLFile 
set line=%* 
echo !line:~1,-1!>> output.html 

PS - してください、original codeに表示されていない追加の部品が含まれていません、 :eofラベルのように...ラベルは、特別であることを示すために、goto :EOFコマンドに大文字で書かれています。詳細についてはgoto /?を入力してください。

+0

入手しました。私は元の投稿を編集しました。このすべてであなたの助けをありがとう:)。 – Axonn

関連する問題