如何在Windows CMD中使用命令"for"剪切不需要的文本?



我有一个文本文件,如下所示:

@X ABCDEFGHIJKLM_NOPQRST Y=66 XN=80 XC=132 FONTSIZE=4.0 FONTSIZECOND=3.0 ML=0.0 MR=0.0 MT=0.0 MB=0.0 @x@R111,2222222,222227,22222222,0,"33333333333333333333333333","444444444444444444444444","AAAAAAAAAA BBBBBBB CCCCCCCCCCC D.D||EEEEEEEEE 11|11-111EEEEEEE","FFFFFF GGGGGGGGGGG||HHHHHH|IIIIIII",0,11111111,"HHHHHH II JJ 00/000|||","","","99"
111,2222222,222227,22222222,0,"33333333333333333333333333","444444444444444444444444","AAAAAAAAAA BBBBBBB CCCCCCCCCCC D.D||EEEEEEEEE 11|11-111EEEEEEE","FFFFFF GGGGGGGGGGG||HHHHHH|IIIIIII",0,11111111,"HHHHHH II JJ 00/000|||","","","99"
111,2222222,222227,22222222,0,"33333333333333333333333333","444444444444444444444444","AAAAAAAAAA BBBBBBB CCCCCCCCCCC D.D||EEEEEEEEE 11|11-111EEEEEEE","FFFFFF GGGGGGGGGGG||HHHHHH|IIIIIII",0,11111111,"HHHHHH II JJ 00/000|||","","","99"

我需要剪掉不需要的文本,只留下需要的内容。 最后,我应该得到一个新的文本文件,如下所示:

111,2222222,222227,22222222,0,"33333333333333333333333333","444444444444444444444444","AAAAAAAAAA BBBBBBB CCCCCCCCCCC D.D||EEEEEEEEE 11|11-111EEEEEEE","FFFFFF GGGGGGGGGGG||HHHHHH|IIIIIII",0,11111111,"HHHHHH II JJ 00/000|||","","","99"
111,2222222,222227,22222222,0,"33333333333333333333333333","444444444444444444444444","AAAAAAAAAA BBBBBBB CCCCCCCCCCC D.D||EEEEEEEEE 11|11-111EEEEEEE","FFFFFF GGGGGGGGGGG||HHHHHH|IIIIIII",0,11111111,"HHHHHH II JJ 00/000|||","","","99"
111,2222222,222227,22222222,0,"33333333333333333333333333","444444444444444444444444","AAAAAAAAAA BBBBBBB CCCCCCCCCCC D.D||EEEEEEEEE 11|11-111EEEEEEE","FFFFFF GGGGGGGGGGG||HHHHHH|IIIIIII",0,11111111,"HHHHHH II JJ 00/000|||","","","99"

我想通过在窗口中通过纯CMD来做到这一点。我不想使用任何其他软件。我需要留下的文本(每行(是一个正则表达式

,如下所示:任意位数,任意位数,任意字符数,"任意位数"我知道这里唯一的解决方案是命令"for",但我无法自己处理这个问题:( 任何人都可以帮我写一个批处理文件来完成这项工作吗?

问候 彼得

这适用于您的示例数据,但取决于结束文本中不需要的部分的"@x@R"。目前尚不清楚它是否总是存在,但如果没有,您可以根据需要对其进行调整。

它实际上取决于@x@R中的第一个@,然后有3个后续字符可以是任何东西。在您的示例数据中,它们是"x@R"。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=1,* delims=@" %%a in (Test.txt) do (
if [%%b]==[] (
rem Didn't have an @ so use the line as is
echo else %%a
) else (
rem Did have an @ so get the part following the @
set Text=%%b
rem then get the rest of the string beginning at the first character past the x@R
echo first !Text:~3!
)
rem Blank line between outputs
echo.
)
ENDLOCAL
pause
exit /b

好的,根据 thx1138v2 的答案,我做了如下事情:

@echo off    
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=1,* delims=@" %%a in (input.txt) do (
if [%%b]==[] (
set var1=%%a
for /f "tokens=1-15 delims=," %%a in ("!var1!") do (
set line=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j,%%k,%%l,%%m,%%n
set end=%%o
echo !line!,!end:~0,4! >> output.txt
)
) else (
set Text=%%b
echo !Text:~3! >> output.txt
)
)
endlocal
pause
exit /b

我知道我以一种非常原始的方式做到了,但它正在做我想做的事,所以对我来说已经足够好了。

非常感谢您的帮助。

最新更新