2

2 つのテキスト ファイル (test1.txt と test2.txt) の内容を比較したいバッチ ファイルがあります。test1.txt の各エントリを検索し、test2.txt の各エントリを探して、エントリが見つかったかどうかを通知するようにしたいと思います。私はいくつかの入力を探し回っていますが、役立つものを思い付くことができないようです.

たとえば、test1.txt の内容は次のとおりです。 赤 青 緑 オレンジ

および test2.txt には以下が含まれます: 赤 青 オレンジ

理想的には、「緑」が見つからないことを教えてもらいたいのですが...

私はそれが次のようなものであるべきだと考えていました:

@ECHO OFF

FOR /F %%A IN (C:\test1.txt) DO (
    FIND /I %%A C:\test2.txt
    IF %ERRORLEVEL% EQU 0 (ECHO Sring found!) ELSE (ECHO string not found!)
)

...しかし、これは私にとってあまり効果がありません。どんな助けでも大歓迎です!

4

2 に答える 2

2

コードには 2 つの問題があります。

1) FIND コマンドでは、検索文字列を引用符で囲む必要があります。

2) あなたの論理はほぼ正しいです。行が解析されると問題が%ERRORLEVEL%拡大し、括弧で囲まれた DO() ブロック全体が 1 回のパスで解析されます。したがって、FORループが実行される前に存在していた値に常に展開されます-必要なものではありません。

いくつかの簡単な解決策があります。

遅延展開を使用する

@ECHO OFF
setlocal enableDelayedExpansion
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt
  IF !ERRORLEVEL! EQU 0 (ECHO Sring found^^!) ELSE (ECHO string not found^^!)
)

IF ERRORLEVEL を使用します (errorlevel が 1 以上の場合、IF ERRORLEVEL 1 は true です)

@ECHO OFF
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt
  IF NOT ERRORLEVEL 1 (ECHO Sring found!) ELSE (ECHO string not found!)
)

&&および||条件演算子を使用する

@ECHO OFF
FOR /F %%A IN (C:\test1.txt) DO (
  FIND /I "%%A" C:\test2.txt && (ECHO Sring found!) || (ECHO string not found!)
)
于 2012-12-13T20:08:00.003 に答える
1

パラメーター /V を使用findstrして一致を含まない行を出力し、/G を使用してファイルから検索文字列を読み取ることができます。dbenham が示唆したように、 /L オプションを追加して、次のようにリテラル検索を強制することもお勧めします。

findstr /L /V /G:text2.txt text1.txt

text1.txtこれにより、存在しないすべての行が印刷されますtext2.txt

于 2012-12-13T21:24:36.110 に答える