1

私は長い間検索してきましたが、私の問題に役立つものは見つかりませんでした。簡単に聞こえるかもしれませんが、誰かが私を助けてくれたらとても嬉しいです:

テキストファイル内のすべての文字列に特定の部分文字列が含まれているかどうかを証明するバッチ スクリプトを作成したいと考えています。この場合、この部分文字列を含む文字列全体を出力する必要があります。私が探している文字列は、二重引用符で囲まれています。

私のコードはテキストファイルのすべての行で機能しますが、すべての文字列で必要です。

事前にt​​hx!

@echo off
setlocal enableextensions enabledelayedexpansion
    for /f "delims=" %%A in ('findstr "somesubstring" "textfile.txt"') do (
        echo %%A 
    )
4

2 に答える 2

2

おそらくこれはあなたが望むものですか?

@echo off
setlocal enabledelayedexpansion

set "substring=somesubstring"
for /f "delims=" %%A in ('findstr "%substring%" "textfile.txt"') do (
   for %%B in (%%A) do (
      set "string=%%~B"
      if "!string:%substring%=!" neq "!string!" echo %%B
   )
)

「文字列」の外側の文字 (引用符で囲まれていない) が特殊なバッチ文字である場合、この Bath ファイルは失敗する可能性があります。

于 2014-06-02T14:58:19.570 に答える
1

最初にツールを使用して、各文字列を 1 行に分離します。次に、FINDSTR を使用して、部分文字列を含む引用符で囲まれた行のみを返すことができます

最も難しい部分は、引用符で囲まれた文字列を分離することです。私のREPL.BAT 正規表現検索および置換ユーティリティは良いオプションです。これは、XP 以降の最新の Windows マシンでネイティブに実行されるハイブリッド JScript/バッチ スクリプトです。

type "textfile.txt" | repl (\q.*?\q) \r\n$1\r\n x | findstr /x ^"\".*substring.*\"^"

引用符で囲まずに文字列を表示したい場合は、次のようにします。

for /f delims^=^ eol^= %%A in (
  'type "textfile.txt" ^| repl (\q.*?\q) \r\n$1\r\n x ^| findstr /x ^"\".*substring.*\"^"'
) do echo %%~A
于 2014-06-02T15:31:25.887 に答える