Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用windows CMD中的“for”命令剪切不需要的文本?_Batch File_Cmd - Fatal编程技术网

Batch file 如何使用windows CMD中的“for”命令剪切不需要的文本?

Batch file 如何使用windows CMD中的“for”命令剪切不需要的文本?,batch-file,cmd,Batch File,Cmd,我有一个文本文件,如下所示: @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||EEEEEEE

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

@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"
@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
我需要删掉不需要的文字,只留下需要的内容。 最后,我应该得到一个新的文本文件,如下所示:

@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"
@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
我想在windows中通过纯CMD实现这一点。我不想使用任何附加软件。好的是,我需要在每一行留下的文本是一个正则表达式,如下所示:任意数量的数字,任意数量的数字,任意数量的字符,任意数量的数字

我知道这里唯一的解决方案是命令“for”,但我自己无法处理这个问题: 有人能帮我写一个批处理文件来完成这项工作吗

问候
Peter

这适用于示例数据,但取决于@x@R结束文本中不需要的部分。现在还不清楚它是否总是存在,但如果不是,你可以根据需要调整它

这实际上取决于第一个@in@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的回答,我做了如下工作:

@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"
@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
我知道我是用一种非常原始的方式做的,但它做了我想做的,所以对我来说已经足够好了


非常感谢您的帮助。

在我看来,您似乎受到了自己的限制。我的限制是只帮助那些至少尝试自己寻找解决方案的人,而不是脚本编写服务;仅仅要求代码在这里是离题的!请阅读并学习!@R是邹想要移除的字符串部分的最后一部分吗?好的。这是所有论坛上最有价值的答案。你为什么要浪费宝贵的时间发表这样的评论?这对你有帮助吗?在我得到帮助之前你想让我做什么?你想让我分享我的人生故事吗?我不是专家,这只是一种爱好。我只写非常简单的批处理脚本,但最好的是,他们做了我希望他们为我做的事情,这已经足够好了。你想让我展示我现在尝试做的整个脚本吗?该脚本对文件执行一些非常基本的操作,但没有显示任何内容。但是我想再增加一个额外的操作,但是我太跛脚了,不能自己写。你应该加上你的评论“使用谷歌”:我做了,我找到了这个论坛。我发现了一些例子,如何使用“for”来做我需要的事情,但遗憾的是,这对我来说太复杂了。或者你想让我展示我的跛子试图用这个“for”,然后写一些我不知道到底在做什么的东西?谢谢。是的,我确实是从这种思维方式开始的。只是为了从第一行中删除不需要的文本。看起来它总是以@x@R.但是,我忘了提到,是的,我知道我的缺点,有时在最后一行的末尾还有一些我不想要的东西。所以这就是为什么我认为剪一段合适的文字更容易的原因。我测试了你的脚本。也许这是某种方式。只有最后一行有问题,如果有什么。但我可以单独检查最后一行,并在99之后删除所有内容。请告诉我一件事。在第一行的开头还有@X,是什么使得该脚本接受另一个第二行?For循环要将第一个@X标识为分隔符,它前面必须有东西。否则,就没有什么可界定的了。