You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CMD获取程序应用名称?WMIC命令使用遇阻求助

提取EXE文件名中的程序名称(不含版本号)

看起来你想从带版本号的EXE文件名里提取纯程序名,比如从Rufus v2.14.exe里拿到Rufus——用wmic直接获取的话确实会返回完整路径,还可能因为格式问题出现错乱,咱们用批处理的几种方法来解决这个问题:

方法1:直接处理已知文件路径(最简洁)

如果已经知道文件的完整路径,直接用for命令提取文件名并拆分:

@echo off
:: 替换成你的文件路径
set "target_file=C:\users\username\desktop\Rufus v2.14.exe"

:: 提取文件名(不含路径),比如得到"Rufus v2.14.exe"
for %%F in ("%target_file%") do set "filename=%%~nxF"

:: 按空格拆分文件名,取第一部分就是程序名
for %%A in (%filename%) do set "program_name=%%A" & goto :show_result

:show_result
echo 提取到的程序名称:%program_name%

原理:%%~nxF是批处理里的变量扩展,专门用来提取文件的“名称+扩展名”;第二个for会把文件名按空格分割,自动取第一个片段。

方法2:结合WMIC输出处理

如果你必须用wmic获取文件信息,需要先处理它的输出格式(WMIC会输出空白行和表头,还要转义路径里的反斜杠):

@echo off
set "target_file=C:\users\username\desktop\Rufus v2.14.exe"

:: 把路径里的\换成\\,WMIC要求路径用双反斜杠
set "wmic_path=%target_file:\=\\%"

:: 用WMIC获取完整路径,跳过表头和空白行
for /f "skip=1 tokens=*" %%A in ('wmic datafile where name^="%wmic_path%" get name') do (
    if not "%%A"=="" (
        set "full_path=%%A"
        goto :process_filename
    )
)

:process_filename
:: 提取文件名
for %%F in ("%full_path%") do set "filename=%%~nxF"

:: 拆分取程序名
for %%A in (%filename%) do set "program_name=%%A" & goto :show_result

:show_result
echo 提取到的程序名称:%program_name%

注意:WMIC的where条件里的等号前面要加^转义,不然批处理会报错。

方法3:针对固定版本格式的快速替换

如果你的EXE版本号都是以 v(空格+小写v)开头的,比如Rufus v2.14.exe、7-Zip v22.01.exe,可以直接用字符串替换搞定:

@echo off
set "target_file=C:\users\username\desktop\Rufus v2.14.exe"

:: 提取文件名(不含扩展名),得到"Rufus v2.14"
for %%F in ("%target_file%") do set "filename_no_ext=%%~nF"

:: 把" v"及后面的内容全部替换为空
set "program_name=%filename_no_ext: v=" & rem %"

echo 提取到的程序名称:%program_name%

这个方法最简洁,但只适用于版本号格式固定的场景。

内容的提问来源于stack exchange,提问作者stevenjake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:46:53