0

DOSコマンドを使用してコマンドラインの行から単語を解析しようとしています

文字列に_( "が含まれている場合は、ファイルに保存します。例:

   js\.svn\text:        $errors=      '</b> - ' . _("LABEL") . ' '      . _('ERR

そうでない場合は、それを無視したいと思います。

デリムがどのように機能するのか、またはこれに使用する必要があるのか​​どうかを理解するのに苦労しています。文字列ではなく、行全体を出力する例をたくさん見ます。

または...行にそれ以上なくなるまで各単語のforループを調べることができると思っていました...そして単語の先頭が_( "と一致する場合は、ファイルに出力しますか?

このようなもの?

 for /F "tokens=1*" %%i in (get_list.txt) do(
   for %%A in (%%j) do(
      if (%%A == "_("")) >> get_id.txt
  )
 )  

誰かが私の構文を修正したり、何らかの方法で私を導いたりできますか?

4

2 に答える 2

0

編集

あなたの質問を読み直した後、あなたが何を望んでいるのか完全にはわかりません。一致したものだけでなく、行全体をテキスト ファイルにダンプしたいということですか?

また、他のことについてもはっきりしていません。PHPっぽいコードが含まれていますかget_list.txt、それともPHPっぽいコードをチェックしたいファイルのリストが含まれていますか?

get_list.txtがコードで、一致する行を にダンプしたい場合get_id.txt、必要なのは だけですfindstr "_(" "get_list.txt" >> "get_id.txt"


次の回答はget_id.txtmatch文字列 _(" match".


パス 1

もし私があなたなら、grep -oを使ってこれを行うでしょう。for ループでも実行できますが、grep を使用するとはるかに簡単に実行できます。

grep -P -o "(?<=_\([\'\"])\w+" get_list.txt >> get_id.txt

...キャプチャするものが常に引用符で囲まれている場合、または...

grep -P -o "(?<=_\()[^\)]+" get_list.txt | grep -P -o "\w+" >> get_id.txt

...引用符で囲まれていない整数、ブール値、またはその他の引用符で囲まれていないデータ型がある場合。


パス 2

単純なバッチ スクリプトの使用を主張する場合、2 番目に効率的な方法は、JScript ハイブリッド スクリプトを使用して、JScript の正規表現マッチングを利用することです。

@if (@x==@y) @end /*

:: batch portion

@echo off
setlocal
for /f "delims=" %%I in ('findstr "_(" "get_list.txt"') do (
    cscript /nologo /e:jscript "%~f0" %%I >> get_id.txt
)

goto :EOF

:: JScript portion */
var m=WSH.arguments(0).match(/_\([\'\"]?\w+/g);
for (var i=0; i<m.length; i++ ) {
    WSH.echo(m[i].replace(/_\([\'\"]?/,''));
}

パス 3

あなたの例のようにテキストファイルを単語ごとに解析したいのであれば、これがあなたが探している構文だと思います。テキスト ファイルが大きい場合、これが最も遅い解決策になると思います。バッチのループが非常に遅くなる場合があるからです。

@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%I in ('findstr "_(" "get_list.txt"') do (
    for %%x in (%%I) do (
        set word=%%x
        set word=!word:_^(=!
        if not !word!==%%x (
            set word=!word:"=!
            set word=!word:'=!
            >> get_id.txt echo !word:^)=!
        )
    )
)
于 2013-03-18T13:07:08.610 に答える
0

外部ユーティリティも「FOR」も必要ありません。この行を試してください:

 >get_id.txt findstr _(\" get_list.txt

\ は引用符を「エスケープ」します。次の行は機能しません。

 findstr _(\" get_list.txt >get_id.txt
于 2013-03-18T16:35:43.457 に答える