for ループを使用して値を印刷しますが、findstr コマンドを使用せずに特定の値をフィルターします。

for ループを使用して値を印刷しますが、findstr コマンドを使用せずに特定の値をフィルターします。

私が使用しているバッチ スクリプトには次のコードが含まれています。

@echo off & setLocal enableDELAYedeXpansioN

for /L %%a in (0 1 10) do (
for /L %%b in (1 1 10) do (
set X=%%a%%b
echo. !X!
)) >>newfile.txt

rem ----> findstr /V "11 22 33 44 55 66" ABCD.txt > outfile.txt

上記の出力は次のようになります。

11
12
13
.
.
.
98
99

私の問題は、最初のループ変数と 2 番目のループ変数の両方が同じである場合に、テキスト ファイル内で (11,22,33....) のような重複した数値や値を表示したくないことです。

2 番目の新しいテキスト ファイルでフィルター処理するために、コマンドをミックス (スクリプト内でコメント アウト)に入れることはできますfindstrが、for ループを使用するだけでこれが可能かどうかを確認したいと思います。

つまり、またはが含まれているかどうかをチェックする別の for ループにecho. !X!追加したい結果が表示されています...それらの値 (同じ) をスキップし、両方のループから同じではないテキスト ファイル内の残りの値をさらに処理する必要があります。!X!!X!112255echo.

答え1

もちろん、簡単な条件文を使うこともできますIF NOTそして、最初のFOR /L変数が2番目の変数%%aの値と等しいかどうかを伝えます。FOR /L%%becho出力ファイルに。

また、ループ内の変数>>に追加リダイレクトを配置して、期待どおりにループからの正しい値が追加されるようにします。さらに、初期ロジックを の上部に配置したので、実行前に存在する場合は最初に削除されます。echo%X%IF EXIST newfile.txt DEL /Q /F newfile.txt

@ECHO ON
setlocal enabledelayedexpansion

IF EXIST newfile.txt DEL /Q /F newfile.txt
for /L %%a in (0 1 10) do ( 
    for /L %%b in (1 1 10) do ( 
        IF NOT %%a==%%b set X=%%a%%b
        echo. !X! >>newfile.txt
)) 

出力例


その他のリソース

関連情報