1

指定された 2 つの ID 番号のいずれかを持つパイプ区切りファイルからこれらの行をコピーするバッチ スクリプトを作成する必要があります。

たとえば、このファイルの場合:

Jack | 12 | Jacksonville
Jane | 34 | Minneapolis

ハードコーディングする必要がある ID 番号は 12 と 56 です。そのため、新しいテキスト ファイルを生成する必要があり、次の内容が含まれます。

Jack | 12 | Jacksonville

提案?

4

2 に答える 2

2

「コピー」の意味がわかりません。一致する行だけを含む新しいファイルを作成したいと思っていると思います。正規表現で 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"

パイプで区切られた数字を追​​加して、括弧内を検索するのは簡単なことです。

于 2013-01-21T14:31:03.207 に答える
1

ファイル内の 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
于 2013-01-21T09:33:49.730 に答える