
私が使用しているバッチ スクリプトには次のコードが含まれています。
@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!
11
22
55
echo.
答え1
もちろん、簡単な条件文を使うこともできますIF NOT
そして、最初のFOR /L
変数が2番目の変数%%a
の値と等しいかどうかを伝えます。FOR /L
%%b
echo
出力ファイルに。
また、ループ内の変数>>
に追加リダイレクトを配置して、期待どおりにループからの正しい値が追加されるようにします。さらに、初期ロジックを の上部に配置したので、実行前に存在する場合は最初に削除されます。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
))