繁体   English   中英

在批处理中寻找两个字符串作为文件名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM