在批处理文件中使用带有通配符的explorer.exe

时间:2014-06-03 20:00:43

标签: batch-file cmd windows-explorer

我的问题是在批处理文件中使用select参数启动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

1 个答案:

答案 0 :(得分:0)

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=