1

だから、私は次のような行のhtmlファイルを持っています:

<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>

私の仕事は、fid = "RandomString"を見つけて、外部ソフトウェアを使用せずに""の間のすべてをテキストファイルにコピーすることです。RandonStringの長さは2〜100文字です。

4

1 に答える 1

4

それはそれほど難しいことではありません、ここに5行の解決策があります:

set "x=<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>"
set "x=%x:*fid=%"
set "x=%x:";="&rem %
set  x=%x:~2%
echo %x%

何が起こっているのかの説明。

文字列内の5つの特殊文字、、、、、および<末尾>=データのトリミングに使用される文字を処理する必要があります。 "&

1〜3行目: <>どちらもリダイレクト文字であるため、これらを処理するには、変数全体"を二重引用符( )で囲む必要があります。ただし、変数自体に二重引用符を追加する必要はありません。

1行目設定する変数のに最初の引用符( " x=)を置き、設定するデータの<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>に2番目の引用符(")を置くことにより、コマンドSETは引用符が変数に含まれないことを認識します。したがって、特殊文字を含む変数データをエラーなしで設定できます。(変数データ内に引用符を入れることもできますが、変数データに2つの特殊文字が追加され、他の検索および置換コマンドの処理がより困難になります。)

2行目次のステップは、までのすべてを削除し、までのすべてfid*fid一致させfid=%何も置き換えないことです。

3行目次のステップは、後";にすべてを削除することです。これには少しハックが必要です。コマンドプロセッサは="&rem %、検索と置換に追加することで、これを行うようにだまされる可能性があります。'='は、コマンドプロセッサに;"次の文字に置き換えるように指示しますが、次の文字はです"。これにより、前のsetコマンドが引用符で囲まれたコマンドになり、特殊&文字が引用符で囲まれず、解釈できるようになります。これにより、基本的にすべて&が別の行に配置されるため、searchandreplaceコマンドは何も置き換え";られません。REMステートメントは、一致した後に来るデータを確認するためにあります";コマンドとして解釈されず、リダイレクト文字が無視されることも意味します。

したがって、コマンドプロセッサが認識するのは次のとおりです。

set x=="RandonString
rem "; v_width=620; v_height=490;</script>

に設定xします="RandonString

4行%x%目ここで、で始まるので問題が発生します="。両方とも=特殊"文字であり、=特に一致させるのが困難です。しかし、幸いなことに、文字列はで始まることがわかっ="ているので、解決策は簡単です。コマンドプロセッサに2番目の文字から開始するように指示することで最初の2文字をスキップします(文字0は現在= =、文字1は現在= "、したがって文字2 = R)。したがって、2行目は。までのすべて(リダイレクト文字を含む)を削除しfid3行";目は文字列の最後まで(リダイレクト文字を含む)を含むすべてを削除したため、
%x:~2%=RandonString。すべてのリダイレクト文字が削除されているので、変数を引用符で囲む必要はまったくありません。

5行目変数をechoするだけですx

于 2012-10-20T21:55:06.193 に答える