在Windows中修剪文本文件末尾的额外管道

时间:2014-04-04 13:01:56

标签: regex windows batch-file text trim

所以基本上我有一个输出管道分隔的文本文件的进程,看起来像这样:

|abc123|1*|004|**gobbligook|001|%|2014-01-01|||||||||||||

这只是一个例子,我不确定答案是否涉及正则表达式。如果它,我会把实际的线。反正

问题

因此,对于此示例,接受此文件的导入过程正在查找8个管道,但是如果它在8之后看到更多管道,则查找导入过程失败。

问题

我是否可以在Windows环境中使用一个进程来修剪整个文件末尾的尾部管道?

更新

Magoo为我提供了一个很好的答案我正在工作,但我一直收到这个错误:此时分隔符出乎意料

这是代码:

@ECHO OFF
SETLOCAL
SET "sourcedir=C:\Users\Desktop\Pipe Delimiter Project"
SET "destdir=C:\Users\Desktop\Pipe Delimiter Project"
(
 FOR /f "tokens=1-7delims=|" %%a IN ('TYPE "%sourcedir%\test.txt"') DO (
 ECHO(^|%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g^|
 )
)>%destdir%\newfile.txt

任何人都知道什么是错的?我也只是从问题| abc123 | .. |中加入粘贴在文件中6次...谢谢!

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=."
SET "destdir=U:\destdir"
(
 FOR /f "delims=" %%a IN ('TYPE "%sourcedir%\q22863616.txt"') DO (
 SET "line=%%a"
 ECHO(!line:~0,-12!
 )
)>%destdir%\newfile.txt

GOTO :EOF

我使用了一个名为q22863616.txt的文件,其中包含我的测试数据。 生成newfile.txt

假设最后12个字段都是空的,否则缺少信息。


另一种形式,给出了额外的信息

@ECHO OFF
SETLOCAL
SET "sourcedir=."
SET "destdir=U:\destdir"
(
 FOR /f "tokens=1-7delims=|" %%a IN ('TYPE "%sourcedir%\q22863616.txt"') DO (
 ECHO(^|%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g^|
 )
)>%destdir%\newfile.txt

好的 - 第三次是魅力。

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=."
SET "destdir=U:\destdir"
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
(
 FOR /f "delims=" %%a IN ('TYPE "%sourcedir%\q22863616.txt"') DO (
 SET "$0=%%a"
 SET "$1=%%a"
 FOR /l %%c IN (1,1,8) DO SET "$1=!$1:*|=!"
 SET "$2=%%a"
 SET "$3="
 SET /a tot=0
 FOR /f "delims=:" %%e IN ('set $^|findstr /o /r "$"') DO SET /a tot=%%e - !tot! - 5
 CALL :show !tot!
 CALL ECHO %%$2:~0,-!tot!%%
 )
)>%destdir%\newfile.txt

GOTO :EOF

:show
CALL SET "$3=%%$2:~0,-%1%%"
FOR /f "tokens=1*delims==" %%y IN ('set $3') DO ECHO(%%z
GOTO :eof

这似乎不受数据中%的影响,但会在!&上产生窒息。你支付了钱,你可以选择......

答案 1 :(得分:0)

这应该吃尾随管道,但留下8个

@echo off
type "file.txt"| repl "(.*?\|{8})\|*$" "$1" >"newfile.txt"

这使用名为repl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

下载

repl.bat放在与批处理文件相同的文件夹中或放在路径上的文件夹中。