这应该很简单..但是,我没有得到它..
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 (...
但我还有其他要比较的文件名..
我还考虑过做一个比较部分字符串,但似乎也没有工作..是的,它似乎只是单独使用sams或tims而且我试图使用GEQ,LSS等的各种组合来没有成功。 https://superuser.com/questions/541575/comparing-part-of-a-filename-in-a-windows-batch-file
感谢。
答案 0 :(得分:1)
如果要测试文件是否包含可能列表中的子字符串,最简单的方法是将findstr
与conditional execution一起使用。
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
答案 1 :(得分:0)
@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
你当然可以用%% G替换%% P,但你不需要两个..:)
对此有用的是,你可以做多个这些,例如:
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
感谢您帮助我指出正确的方向!!