解析一个带衬里的文本文件并用分隔符分隔它

时间:2015-03-13 20:59:49

标签: windows batch-file cmd

在批量解析时,我遇到了长文本文件的问题,特别是1024字符限制,因为我将变量设置为文件的内容,它只会抓取1024个第一个字符。

我想通过set delimiter(我使用〜作为我的分隔符)将我的文本文件拆分到一个新行上,并将结果输出到另一个文本文件。 进入的文件看起来像:

line1~line2~line3~line4~etc~

一直到例如5000个字符。我希望结果看起来像:

line1~
line2~
line3~
line4~
etc~

这是我目前的代码:

@echo off
set /p input=<input.txt
call :parse "%input%"
pause
goto :eof

:parse
setlocal
set var=%~1
for /F "tokens=* delims=~" %%a in ("%var%") do (
    if not "%%a" == "" call :splitVar "%%a"
    if not "%%b" == "" call :parse "%%b"
)
endlocal
pause
goto :eof

:splitVar
setlocal
echo %~1
set filename=%~1
goto :eof

有没有办法克服1024个字符的限制或用某种方式解析它?

另外,如果这个问题以任何方式违反规则,请告诉我。我是stackoverflow的新手。

2 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
FOR /f "delims=" %%a IN (q2904836.txt) DO call :parse "%%a"
pause
goto :eof

:parse
setlocal
set var=%~1
:parseloop
IF DEFINED var for /F "tokens=1* delims=~" %%a in ("%var%") do (
    if not "%%a" == "" call :splitVar "%%a"&SET "var=%%b"&GOTO parseloop
)
endlocal
pause
goto :eof

:splitVar
setlocal
echo %~1
set filename=%~1
goto :eof

我使用了一个名为q2904836.txt的文件,其中包含一些数据供我测试。

堆叠的范围是有限制的,并且您为行中的每个条目调用:parse,这将超出限制。

请注意使用tokens=1*,将下一个标记分配给%%a,并将剩余行标记为%%b

以所示的方式使用for/f将克服1024限制 - 但仍然有超过8100个字符的限制。

另请注意,setlocal/endlocal中的:parse和'splitvar`中的setlocal / implicit-endlocal将意味着将丢弃在这些例程中可能已建立或更改的变量。

答案 1 :(得分:0)

限制不是1024,而是8191。

分裂比你想象的有点不同。

它会拆分为多个令牌,但您还需要其他解决方案。

您可以使用换行符替换所有符号,而不是获得所需的结果。

Setlocal enabledelayedexpansion
Set LF=^


for %%a in ("!LF!") do set var=!var:-=%%a!
For /f "delims=" %%a in ("!var!") Do echo %%a