如何通过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
相关产品推荐
相关产品推荐

