Batch file 调用不带扩展名但带-i的.exe

Batch file 调用不带扩展名但带-i的.exe,batch-file,cmd,Batch File,Cmd,我正致力于将批处理文件的功能集成到一个更大的PowerShell文件中(这也可以做其他事情),以便最终摆脱一些较小的批处理文件 我遇到了这样一条线: if exist "C:\path\thing.exe" ("C:\path\thing" -i "C:\otherpath\something.dll") 当第二行显示.exe名称但没有文件扩展名时,它引用的是什么 编辑:我在.exe上运行了一个/?,我认为这可能是相关的: /i <assembly_path> [ /r <

我正致力于将批处理文件的功能集成到一个更大的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[/r][f]
将程序集安装到全局程序集缓存。是
包含程序集清单的文件的名称。
示例:/i myDll.dll/r文件路径c:\projects\myapp.exe“我的应用”

因此,我猜
-I
正在运行.exe,使用.dll文件作为某种配置文件?

在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,而无需指定其文件夹。

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

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


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

@TessellatingHeckler的全名。文件夹中唯一具有该名称的是
thing.EXE.config
。它如何知道引用哪个?它将在
%PATHEXT%
中找到扩展。但你为什么在乎它在做什么?只需检查二进制文件是否存在,然后像批处理文件一样运行
“C:\path\thing”-i“C:\otherpath\something.dll”
。第一个are参数之后的所有内容都与使用exe或not@L你说得对。我只是想确定它没有做一些我在将其转换为PowerShell时可能会错过的花哨事情。我也不知道在PowerShell中是否可以不带扩展运行
东西
。@tessellingheckler为什么会这样?如果存在“thing1.exe”(somethingelse.exe),我可以说
。我的意思是,为什么在没有扩展名的情况下,它会自动转到
thing.exe
而不是
thing.exe.config
,或者如果有类似
thing.bat
thing?并向下滚动至“命令搜索序列”标题。PowerShell命令解析记录在这里:有趣。谢谢你的信息!