所以基本上我有一个输出管道分隔的文本文件的进程,看起来像这样:
|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次...谢谢!
答案 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
放在与批处理文件相同的文件夹中或放在路径上的文件夹中。