Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/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
String 批处理-在第行的前10个字符中查找字符串并打印整行_String_Batch File_Cmd_Findstr - Fatal编程技术网

String 批处理-在第行的前10个字符中查找字符串并打印整行

String 批处理-在第行的前10个字符中查找字符串并打印整行,string,batch-file,cmd,findstr,String,Batch File,Cmd,Findstr,我在findstr命令上遇到问题。 我正在使用批处理文件来执行一个过程,该过程将搜索文件夹中的所有.txt文件,并打印出在前面定义的前10个字符中包含字符串的行。 到目前为止,我一直在使用此批次: for /f "delims=" %%I in ('dir/B *.txt') do ( for /f "delims=" %%J in (%%I) do ( set "=%%J" call echo %%:~0,10%%|findstr "R0621 3241

我在findstr命令上遇到问题。 我正在使用批处理文件来执行一个过程,该过程将搜索文件夹中的所有.txt文件,并打印出在前面定义的前10个字符中包含字符串的行。 到目前为止,我一直在使用此批次: for /f "delims=" %%I in ('dir/B *.txt') do ( for /f "delims=" %%J in (%%I) do ( set "=%%J" call echo %%:~0,10%%|findstr "R0621 32411"&&call echo %%_%% >> search.txt ) ) endlocal 对于/f“delims=“%%I in('dir/B*.txt')do( 对于/f“delims=“%%J in(%%I)do( 设置“=%%J” 调用echo%%:~0,10%%| findstr“R0621 32411”&调用echo%%%>>search.txt ) ) 端部 然而,不知何故,该批处理不会打印出由R0621或32411等字符串组成的行。这是虫子吗? 当我尝试典型的findstr批处理时,它工作正常,打印出的行很好。例如: findstr "R0621 32411" *.txt >> search.txt findstr“R0621 32411”*.txt>>search.txt 此批处理搜索的.txt文件如下所示: AA32411 AAA RANDOMTEXTANDNUMBERS 13121313212153 BBR0621 BBB RANDOMTEXTANDNUMBERS 78975487798797 CCY4488 CCC RANDOMTEXTANDNUMBERS 44455577799998 AA32411 AAA随机文本和编号13121313212153 BBR0621 BBB随机文本和数字78975487798797 CCY4488 CCC随机文本和数字44455577799998 我不能使用findstr,因为它会在10个字符后查找字符串,而那些我不需要的行(我只需要那些有我在每行前10个字符中定义的字符串的行)

还有别的选择吗?我试图在网上搜索,但在任何地方都找不到任何帮助。 为了更好的理解,你可以查看我以前的帖子

请注意,如果输出文件也有.txt扩展名,它将包含在原始findstr中!您可以在末尾使用
ren search.out search.txt
命令重命名扩展名正确的输出文件,或在其他目录中创建扩展名为.txt的输出文件

@echo off
    setlocal enableextensions

    set "tempFile=%temp%\%~nx0.tmp"
    set "outputFile=search.out"

    (for %%a in ( 
        R0621 .R0621 ..R0621 ...R0621 ....R0621 .....R0621
        32411 .32411 ..32411 ...32411 ....32411 .....32411
    ) do @echo %%a) > "%tempFile%"

    type nul > "%outputFile%"
    for %%a in (*.txt) do findstr /r /b /g:"%tempFile%" "%%~a" >> "%outputFile%"

    del /q "%tempFile%" >nul 2>nul

    endlocal
请注意,如果输出文件也有.txt扩展名,它将包含在原始findstr中!您可以在末尾使用
ren search.out search.txt
命令重命名扩展名正确的输出文件,或在其他目录中创建扩展名为.txt的输出文件

@echo off
    setlocal enableextensions

    set "tempFile=%temp%\%~nx0.tmp"
    set "outputFile=search.out"

    (for %%a in ( 
        R0621 .R0621 ..R0621 ...R0621 ....R0621 .....R0621
        32411 .32411 ..32411 ...32411 ....32411 .....32411
    ) do @echo %%a) > "%tempFile%"

    type nul > "%outputFile%"
    for %%a in (*.txt) do findstr /r /b /g:"%tempFile%" "%%~a" >> "%outputFile%"

    del /q "%tempFile%" >nul 2>nul

    endlocal
它只需构造一个临时文件,其中包含要搜索的特定正则表达式。由于字符串应位于前10个字符中,且长度为5个字符(所有这些都是硬编码的,但可能会进行调整),因此搜索字符串可以从第一个、第二个、。。。从行开始到第六个位置(正则表达式中的点表示任何字符都可以位于该位置)

一旦构建了搜索文件,一个
for
循环将迭代
.txt
文件,对于每个文件,我们使用
findstr
,在行(
/b
)的开头搜索从生成的文件(
/g:
)读取的正则表达式(
/r

它只需构造一个临时文件,其中包含要搜索的特定正则表达式。由于字符串应位于前10个字符中,且长度为5个字符(所有这些都是硬编码的,但可能会进行调整),因此搜索字符串可以从第一个、第二个、。。。从行开始到第六个位置(正则表达式中的点表示任何字符都可以位于该位置)


一旦构建了搜索文件,一个
for
循环将迭代
.txt
文件,我们使用
findstr
搜索每个文件,在行(
/b
)的开头搜索从生成的文件(
/g:
)读取的正则表达式(
/r

您好,我试过了,效果也不错,但无法将2个回答标记为答案,所以我在他第一次发布时标记了Aacini。不管怎样,这也很好用!谢谢!:)你好,试过了,效果也不错,但无法将2个回答标记为答案,所以我在Aacini第一次发帖时标记了他。不管怎样,这也很好用!谢谢!:)