2016-04-08 9 views
0

バッチファイルの作成に問題があります。だから私はあなたの助言が必要です。 フィールド| No = xxx |にデータを取得する必要があります。ファイル内の2つの区切り文字の間に複数の文字列を修正します。

私はこの問題を抱えるファイルが多いため、この作業を行うことができるバッチコードを探しています。

テキストファイル(INPUT.TXT)はこのように作られています:

|Job=1|Typ=S|Action=Order|No=531.04220440.00| 
|Job=1|Typ=P|Action=Information|M=1| 
|Job=2|Typ=S|Action=Order|No=ALR-2005605 | 
|Job=2|Typ=P|Action=Information|M=3| 
…. 
|Job=99|Typ=S|Action=Order|No=AF502033H| 
|Job=99|Typ=P|Action=Information|M=1| 

私は道でJREPLを理解することができませんでした。 | No =と|の間の入力に対応するファイルを作成する必要があります。 ファイルの例は、バッチ(output.txtと)あなたの助けを

|Job=1|Typ=S|Action=Order|No=5310422044000| 
|Job=1|Typ=P|Action=Information|M=1| 
|Job=2|Typ=S|Action=Order|No=2005605| 
|Job=2|Typ=P|Action=Information|M=3| 
…. 
|Job=99|Typ=S|Action=Order|No=502033| 
|Job=99|Typ=P|Action=Information|M=1| 

感謝した後、そのようになるはずです。

+0

あなたが試みたアプローチのスニペットを投稿して、人々があなたを解決策に導くようにしてください。 – betseyb

+0

最初にキーワードを検索する必要があります。 [リンク1](http://stackoverflow.com/questions/19855925/removing-non-alphanumeric-characters-in-a-batch-variable)[link2](http://stackoverflow.com/questions/22465485/how-文字列から-regex-in-windの特殊文字を削除する – enjoying

答えて

0
@ECHO OFF 
SETLOCAL 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q36500938.txt" 
SET "outfile=%destdir%\outfile.txt" 
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
ECHO "%%a"|FIND "|No=" >nul 
IF ERRORLEVEL 1 (ECHO(%%a 
) ELSE (
    SET "line=%%a" 
    CALL :process 
) 
) 
)>"%outfile%" 

GOTO :EOF 

:process 
SET "tail=" 
:procloop 
SET "line=%line:~0,-1%" 
SET "char=%line:~-1%" 
IF "%char%"=="=" (
FOR %%x IN ("%line%%tail%|") DO ECHO(%%~x 
GOTO :EOF 
) 
IF "%char%" geq "0" IF "%char%" leq "9" SET "tail=%char%%tail%" 
GOTO procloop 

あなたの状況に合わせてsourcedirdestdirの設定を変更する必要があります。

テスト用にデータが入っているファイルq36500938.txtを使用しました。

は、それが明示的に記述されていないものの%

OUTFILE%として定義ファイルには、各行の最後に|No=|間のすべての非数値を排除したいということ、それが表示されます生成します。

上記は単に行に|No=が含まれているかどうかを検出し、表示される場合は最後のフィールドにあると仮定しています。表示されない場合は、単に行を逆行させてください。表示される場合は、lineの行を処理してください。

この処理では、最後の文字が単純に削除され、新しい最後の文字が=かどうかが判別されます。そうであれば、それはがNo=であると仮定しているので、末尾を追加して|を閉じて出力します。必要な文字列を引用符で囲むことにより、for%%xに割り当て、%%~xを使用して囲む引用符を削除することができます。そうしないと、解決しにくい構文エラーが発生します。最後の文字が... 9=ではなく、0ある場合

、それが他のそれを無視して=が検出されるまで処理を続行蓄積します。

+0

これは私の最初のファイルで完璧に動作しました。ありがとう@マグー。信じられないほど、あなたの速い答えをありがとう! –

関連する問題