在没有扩展名的情况下调用.exe,但使用-i

时间:2017-06-08 16:37:22

标签: batch-file cmd

我正在努力将批处理文件的功能集成到一个更大的PowerShell文件中(也可以做其他事情),这样我最终可以摆脱一些较小的批处理文件。

我遇到了这样的一行:

if exist "C:\path\thing.exe" 
("C:\path\thing" -i "C:\otherpath\something.dll")

当它说出.exe名称但没有文件扩展名时,它在第二行引用了什么?

编辑:我在.exe上运行/?,我认为这可能是相关的:

/i <assembly_path> [ /r <...> ] [ /f ]
    Installs an assembly to the global assembly cache. <assembly_path> is the
    name of the file that contains the assembly manifest.
    Example: /i myDll.dll /r FILEPATH c:\projects\myapp.exe "My App"

所以我猜-i使用.dll文件作为某种配置文件运行.exe吗?

2 个答案:

答案 0 :(得分:2)

在Windows上,您可以在命令行中没有扩展名的情况下运行可执行文件(带.exe后缀)。

所以这完全有效:

"C:\path\thing" -i "C:\otherpath\something.dll"

在此命令中,-i是可执行文件的参数。正确的语法可能是-i path\to\a\file.dll,因此可执行文件使用dll。由于您的问题非常通用,因此很难说更多

要理解,请尝试在CMD或PowerShell中运行xcopy:

xcopy /?

在此示例中,xcopy是可执行文件,对应于C:\ System32 \ xcopy.exe,/?是命令的参数,解释了xcopy支持的所有可能参数。

实际上,这也有效:

C:\Windows\System32\xcopy.exe /?

但由于C:\ Windows \ System32列在%Path%环境变量中,您可以直接调用xcopy而不指定其文件夹。

答案 1 :(得分:1)

执行不包含扩展名的命令时,cmd.exe使用%PATHEXT%变量的值:

SET PATHEXT

它将补充所列顺序中的每个条目作为替换扩展名,直到成功或全部尝试。

正如您将注意到,第一个条目不太可能显示为.EXE,因此我建议您的新方法恢复为扩展名为thing.exe的全名。