【问题标题】:Using explorer.exe with wildcards in batch file在批处理文件中使用带有通配符的 explorer.exe
【发布时间】:2014-06-03 20:00:42
【问题描述】:

我的问题是在批处理文件中使用选择参数开始 explorer.exe。我用这个:

if exist "!SATIR!\!SATIR:~20,-23!.mp4" (explorer.exe /select, "!SATIR!\!SATIR:~20,-23!.mp4") else (explorer.exe /select, "!SATIR!\!SATIR:~20,-23!.mkv")

它可以工作,但我不想依赖特定的文件扩展名。我想对所有扩展(avi、wmv 等)使用通配符之类的东西。

使用类似的东西:if exist "!SATIR!\!SATIR:~20,-23!.*" explorer.exe /select, "!SATIR!\!SATIR:~20,-23!.*" 不起作用。在explorer.exe 部分失败。到目前为止,我一无所获。有可能吗?

PS. !SATIR! 变量包含那些 mp4 和 mkv 文件的本地地址。类似于:F:\Movies\000y.001y\The.Lord.of.the.Rings.The.Return.of.the.King.(2003){0167260}[00087]

PS. !SATIR:~20,-23! EQU The.Lord.of.the.Rings.The.Return.of.the.King

【问题讨论】:

    标签: batch-file cmd windows-explorer


    【解决方案1】:

    Windows 资源管理器不支持选项 /select 的通配符,因为此选项需要目录的路径或文件的名称(有或没有路径取决于 root 的用法或对象的名称。有关Windows 95/98/Me/NT4Windows 2000/NT4Windows XP(以及更高的 Windows 版本),请参阅 Windows 资源管理器的命令行选项页面。据我所知,此命令行选项无法选择多个文件。

    但是批处理文件仍然可以使用通配符作为文件扩展名来测试是否存在,然后使用与文件规范匹配的文件的全名启动 Windows 资源管理器。

    这是一个示例批处理文件:

    @echo off
    set SATIR=F:\Movies\000y.001y\The.Lord.of.the.Rings.The.Return.of.the.King.(2003){0167260}[00087]
    set FILESPEC=%SATIR:~20,-23%.*
    if exist "%SATIR%\%FILESPEC%" (
        for %%f in ("%SATIR%\%FILESPEC%") do (
            %windir%\explorer.exe /select,"%%f"
            goto :LoopExit
        )
    )
    :LoopExit
    set FILESPEC=
    set SATIR=
    

    好吧,if 条件在这里或多或少没用。下面的批处理文件的行为是相同的。

    @echo off
    set SATIR=F:\Movies\000y.001y\The.Lord.of.the.Rings.The.Return.of.the.King.(2003){0167260}[00087]
    set FILESPEC=%SATIR:~20,-23%.*
    for %%f in ("%SATIR%\%FILESPEC%") do (
        %windir%\explorer.exe /select,"%%f"
        goto :LoopExit
    )
    :LoopExit
    set FILESPEC=
    set SATIR=
    

    【讨论】: