キスワの答えが改善され、簡略化されたバージョンです。
@echo off
(
for /f "usebackq" %%A in ("keywords.txt") do findstr /bl "%%A" list.txt
)>sorted.txt
REM move /y sorted.txt list.txt
FINDSTRコマンドは、キーワードで始まる行にのみ一致し、強制的に検索をリテラル検索にします。 /L
オプションが指定されておらず、キーワードに正規表現のメタ文字が含まれていると、FINDSTRが間違った結果をもたらす可能性があります。
元のファイルをソート済みのファイルに置き換えるコードはコメントアウトされています。単にMOEM文を有効にするには、REM文を削除します。
kiswaさんの回答と同様に、上記はkeyword.txtのキーワードと一致するlist.txtの行のみを出力します。
list.txtにキーワードと一致しない行がある可能性があります。あなたがソートされた出力の下部にこれらの行を保持したい場合は、使用:/I
(大文字小文字を区別しない)オプションが異なるため、複数のリテラル検索文字列を扱うFINDSTRのバグを使用しなければならないこと
@echo off
(
for /f "usebackq" %%A in ("keywords.txt") do findstr /bli "%%A" "list.txt"
findstr /vblig:"keywords.txt" "list.txt"
)>sorted.txt
::move /y sorted.txt list.txt
注意を長さ/I
オプションを指定するとバグは回避されますが、キーワードで大文字と小文字が区別される場合は問題が発生します。 What are the undocumented features and limitations of the Windows FINDSTR command?を参照してください。
list.txtにないキーワードがある可能性があります。あなたがそれら以下のいずれかのデータなしでこれらのキーワードを含めるようにしたい場合は、使用します。
@echo off
(
for /f "usebackq" %%A in ("keywords.txt") do findstr /bl "%%A" "list.txt" || echo %%A
)>sorted.txt
::move /y sorted.txt list.txt
を明らかにあなたは、両方の技術を使用して、両方のファイルの結合を維持することを確認するために組み合わせることができます。
@echo off
(
for /f "usebackq" %%A in ("keywords.txt") do findstr /bli "%%A" "list.txt" || echo %%A
findstr /vblig:"keywords.txt" "list.txt"
)>sorted.txt
::move /y sorted.txt list.txt
のすべて上記のキーワードにスペースまたはタブ文字が含まれていないと仮定します。そうであれば、FOR/FオプションとFINDSTRオプションを変更する必要があります:
@echo off
(
for /f "usebackq delims=" %%A in ("keywords.txt") do findstr /bic:"%%A" "list.txt" || echo %%A
findstr /vblig:"keywords.txt" "list.txt"
)>sorted.txt
::move /y sorted.txt list.txt
ここではWindowsバッチファイルスクリプティングについて話していますか?または、どのスクリプト言語が大丈夫(Python、Perl、Rubyなど)ですか? – kiswa
私はこれについてどうやって行くのか知りません。可能であれば、Windowsのバッチ処理は問題ありません。 – Blainer