[英]Looking for two strings for file names in Batch
这应该很简单..但是,我不明白..
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /r "D:\12" %%X IN (*) DO (
FOR /F %%G IN (%%~nxX) DO for %%P in (server.sams.log* server.tims.log*) do ECHO %%P
)
ENDLOCAL
因此,我要查找的是文件名中包含sams或tims的所有文件,但忽略该文件夹中的任何其他文件。
而且,是的,我知道我可以执行以下操作。
FOR /r "D:\12" %%X IN (server.sams* server.tims*) DO (...
但我还有其他文件名要比较。
我还考虑过比较部分字符串,但似乎也不起作用。是的,它似乎只能单独使用sam或tims,而且我尝试使用GEQ,LSS等的各种组合均未成功。 https://superuser.com/questions/541575/comparing-part-of-a-filename-in-a-windows-batch-file
谢谢。
如果要测试文件是否在可能列表中包含子字符串,最简单的方法是将findstr
与条件执行结合使用 。
SETLOCAL
FOR /r "D:\12" %%X IN (*) DO (
findstr /i "sams tims bobs jims steves" "%%X" >NUL && (
echo %%X: Match found!
) || (
echo %%X: No match.
)
)
或者,甚至更简单,您可以完全消除所有for
循环,而只需使用findstr /s /i "sams tims etc" *
。
无论如何,您的当前代码无法正常工作,因为for %%P
循环仅在响应。 它实际上没有进行任何比较。 如果您希望使用嵌套循环来检查文件名中每个子字符串的存在,请将代码更改为以下内容:
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /r "D:\12" %%X IN (*) DO (
FOR /F %%G IN (%%~nxX) DO (
set "line=%%X"
for %%P in (server.sams.log server.tims.log) do (
if /i not "!line!"=="!line:%%P=!" (
ECHO %%P
)
)
)
)
ENDLOCAL
@rojo-我们甚至不需要多余的%% G“ FOR”循环,因为它可以正常工作。
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /r "D:\12" %%X IN (*) DO (
Set FileName=%%~nxX
for %%P in (sams tims) do (
if /i not "!FileName!"=="!FileName:%%P=!" (
ECHO %%P "!FileName!"
)
)
)
ENDLOCAL
当然,您可以将%% P替换为%% G,但是您不需要两者都.. :)
这样做有帮助的是,您可以执行多个操作,例如:
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /r "D:\12" %%X IN (*) DO (
Set FileName=%%~nxX
for %%P in (sams tims) do (
if /i not "!FileName!"=="!FileName:%%P=!" (
ECHO %%P "!FileName!"
)
for %%P in (jims johns) do (
if /i not "!FileName!"=="!FileName:%%P=!" (
ECHO %%P "!FileName!"
)
)
)
ENDLOCAL
感谢您为我指明正确方向的帮助!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.