指定された 2 つの ID 番号のいずれかを持つパイプ区切りファイルからこれらの行をコピーするバッチ スクリプトを作成する必要があります。
たとえば、このファイルの場合:
Jack | 12 | Jacksonville
Jane | 34 | Minneapolis
ハードコーディングする必要がある ID 番号は 12 と 56 です。そのため、新しいテキスト ファイルを生成する必要があり、次の内容が含まれます。
Jack | 12 | Jacksonville
提案?
指定された 2 つの ID 番号のいずれかを持つパイプ区切りファイルからこれらの行をコピーするバッチ スクリプトを作成する必要があります。
たとえば、このファイルの場合:
Jack | 12 | Jacksonville
Jane | 34 | Minneapolis
ハードコーディングする必要がある ID 番号は 12 と 56 です。そのため、新しいテキスト ファイルを生成する必要があり、次の内容が含まれます。
Jack | 12 | Jacksonville
提案?
「コピー」の意味がわかりません。一致する行だけを含む新しいファイルを作成したいと思っていると思います。正規表現で FINDSTR を使用する非常に簡単な解決策があります。各正規表現は 2 列目の ID を探し、ID の前後に任意の数のスペース (0 を含む) を許可します。
findstr /rb /c:"[^|]*| *12 *|" /c:"[^|]*| *56 *|" "file.txt" >"newFile.txt"
更新: 2015-12-20
FINDSTR は非常に原始的で、完全に非標準の正規表現をサポートしています。交互がない場合、各数値の選択肢は正規表現全体を必要とします。より多くの代替手段を探している場合、これは問題になる可能性があります。
JREPL.BAT regex text processing toolを使用した、もっと簡単な解決策があります。これは、XP 以降の Windows マシンでネイティブに実行される純粋なスクリプト (ハイブリッド JScript/バッチ) です。
call jrepl "^[^|]*\| *(12|56) *\|.*" $0 /jmatch /f "test.txt" /o "newFile.txt"
パイプで区切られた数字を追加して、括弧内を検索するのは簡単なことです。
ファイル内の 12 または 56 に一致するすべての IDIDFile.txt
が新しいファイルに出力されますMatchingIDs.txt
。
@echo off
setlocal enabledelayedexpansion
set line=0
for /f "tokens=2 delims=|" %%a in (IDFile.txt) do (
set num=%%a
set num=!num: =!
if !num!==12 set bool=true
if !num!==56 set bool=true
if "!bool!"=="true" call :GETLINE
set /a line+=1
set bool=false
)
:GETLINE
if not %line%==0 set skip=skip=%line%
for /f "%skip% tokens=* delims=" %%b in (IDFile.txt) do (
echo %%b >>MatchingIDs.txt
goto :BREAK
)
:BREAK