在批量解析时,我遇到了长文本文件的问题,特别是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的新手。
答案 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