批处理脚本,如果它们不以{开头,则循环遍历文件

时间:2017-11-22 11:08:16

标签: windows batch-file

我可以使用一些帮助,我已尝试过类似的主题,但我无法找到我想要的内容。

我需要的是一个批处理脚本,它遍历一个目录,搜索.pro类型的文件,但不要以字符{开头。

然后,该脚本会搜索所有文件并回显在574,575,之间找到的行。

我已经完成了所有的事情,除非我尝试检查文件名时我无法正常工作并且看起来很简单。

我的脚本如下所示:

@echo off

set "sPath=C:\Users\jspajic\Desktop\batskripte\test\test files" 
set "ispis=C:\Users\jspajic\Desktop\batskripte\test\Opera_procesi_DataTabovi.txt"

echo %sPath% > %ispis%

pushd %sPath%

for %%f in (*.pro) do (          :: ---> I guess this part needs to be altered

setlocal enabledelayedexpansion

    for /f "delims=]" %%a in ('findstr /n /B "574," "%%f"') do (set s=%%a )

    if !s! neq 0 (

        for /f "delims=]" %%b in ('findstr /n /B "575," "%%f"') do (set kraj=%%b)
        if !kraj! neq 0 (

            @set /a "ss=s+1"
            @set /a "kraj=kraj+0"
            @set /a "s=s+0"

            if !ss! NEQ !kraj! (

                @echo:
                echo %%f



                @set /a "counter=1"
                for /F "tokens=1* delims=:" %%A in ('type "%%f" ^| findstr /n "^"') do (

                    if !counter! GTR !s! if !counter! LSS !kraj! echo.%%B

                    @set /a "counter=counter+1"
                )
            )   
        )

    )
endlocal

) >> %ispis%

popd

我试过for /f "delims=" %%a in ('dir /B *.pro^|findstr "[A-z]*\.pro" ') 或者有类似的想法,但我不能让它工作因为我只是不知道批处理脚本。

3 个答案:

答案 0 :(得分:3)

for %%f in (*.pro) do ( set "dummy=%%f"
 setlocal enabledelayedexpansion
 if "!dummy:~0,1!" neq "{" (

应该解决你的问题。请注意,它会添加额外级别的括号,因此需要在)之后添加匹配的endlocal,但您似乎擅长这样做。

将文件名分配给虚拟变量,然后在执行其余代码之前查看该虚拟对象的第1个字符是否不等于“{”。

在提示符下,set /?会显示有关子字符串的文档 - 您似乎已经制定了delayed expansion

答案 1 :(得分:2)

因为你的角色没有案例,(上|下),你的搜索目录已经是当前的;您可以轻松地在EOL循环中使用For

For /F "EOL={Delims=" %%f In ('Dir/B/A-D *.pro') Do (

答案 2 :(得分:1)

for /fdir一起使用,按findstr过滤(删除以{开头的所有标记):

for /f "delims=" %%f in ('dir /b /a-d *.pro^|findstr /vb "{"') do (