我有很多文件需要在移动到其他文件夹之前进行过滤。 过滤条件:
[PEQ]*_[+-][1-9][0-9]_[P-R][0-9]_*[._][0-9]*
文件名示例:
P101_+19_R0_3.0_QA.txt
我尝试在批处理脚本中应用过滤器但没有任何反应。 我是否正确定义了过滤器?
我的剧本:
SET _ext1=txt
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (%_source%\[PEQ]*_[+-][1-9][0-9]_[P-R][0-9]_*[._][0-9]*.%_ext1%) do (
echo %%f >> %LOG%
SET _path=%%~df%%~pf
echo !_path! >> %LOG%
SET _filename=%%~nf
echo !_filename! >> %LOG%
echo. >> %LOG%
echo Processing !_filename! >> %LOG%
IF EXIST !_path!!_filename!*.%_ext1% (
copy /Y "!_path!!_filename!*.%_ext1%" "%_target%" >> %LOG%
)
)
ENDLOCAL
答案 0 :(得分:0)
我希望您理解匹配任意数量的任何字符的通配符*
与RegEx *
之间的区别,这意味着前一个匹配的任何数字(也为零)。与RE .
一起使用任何字符.*
将类似于通配符*
@Echo off & SETLOCAL ENABLEDELAYEDEXPANSION
SET _ext1=txt
for /f "delims=" %%f in (
'dir /B "%_source%\*_*_*_*.%_ext1%" ^| Findstr /i "%_source%\[PEQ]*_[+-][1-9][0-9]_[P-R][0-9]_.*[._][0-9]*.%_ext1%" '
) do (
echo %%f >> %LOG%
SET _path=%%~df%%~pf
echo !_path! >> %LOG%
SET _filename=%%~nf
echo !_filename! >> %LOG%
echo. >> %LOG%
echo Processing !_filename! >> %LOG%
IF EXIST !_path!!_filename!*.%_ext1% (
copy /Y "!_path!!_filename!*.%_ext1%" "%_target%" >> %LOG%
)
)
ENDLOCAL
您应首先在开放的cmd窗口中使用dir和findstr测试该行,
然后没有转义^
和周围'
dir /B "%_source%\*_*_*_*.%_ext1%"
如果这适合作为第一个选择添加
dir /B "%_source%\*_*_*_*.%_ext1%" | Findstr /i "%_source%\[PEQ]*_[+-][1-9][0-9]_[P-R][0-9]_.*[._][0-9]*.%_ext1%"
并改变您的RegEx,直到它达到您想要的效果。
请记住,findstr RegEx功能非常有限。