我可以使用一些帮助,我已尝试过类似的主题,但我无法找到我想要的内容。
我需要的是一个批处理脚本,它遍历一个目录,搜索.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" ')
或者有类似的想法,但我不能让它工作因为我只是不知道批处理脚本。
答案 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 /f
与dir
一起使用,按findstr
过滤(删除以{
开头的所有标记):
for /f "delims=" %%f in ('dir /b /a-d *.pro^|findstr /vb "{"') do (