PowerShell读取ini文件后如何拆分字符串去除.exe后缀
PowerShell 读取INI字段并去除.exe后缀实现方案
问题根因
你现有拆分逻辑不生效的核心原因是 -split 运算符默认基于正则表达式做匹配,而.在正则语法中是通配符,代表匹配任意单个字符,所以写-split "."会把字符串的每一个字符都单独拆分,完全达不到按点拆分的预期。
可用实现方案
方案1:调用.NET内置方法处理(最推荐)
[System.IO.Path]::GetFileNameWithoutExtension是专门用于提取文件名(不含后缀)的内置方法,容错性最高,就算文件名包含多个点(例如my.app.exe)也能正确去掉最后一段后缀:
# 读取INI中CLREXE字段对应行 $CLREXE = Get-Content -Path "T:\keeran\Test-kill\test.ini" | Select-String -Pattern 'CLREXE' # 拆分出等号右侧的值,Trim处理掉可能的前后空格 $CLREXE = ($CLREXE -split "=", 2)[1].Trim() # 去除.exe后缀 $d = [System.IO.Path]::GetFileNameWithoutExtension($CLREXE)
方案2:转义点符号后拆分
如果要坚持用拆分逻辑实现,需要将.转义为普通字符(正则中转义写法为\.):
# 单一点分隔的场景直接取第一段即可 $d = ($CLREXE -split "\.")[0] # 适配文件名含多个点的场景可以写为: $segments = $CLREXE -split "\." $d = $segments[0..($segments.Count - 2)] -join "."
方案3:直接替换.exe后缀
用-replace匹配并删除末尾的.exe字符:
# $代表匹配字符串末尾,避免误替换文件名中间的exe字符 $d = $CLREXE -replace "\.exe$", ""
内容的提问来源于stack exchange,提问作者Keeran
相关产品推荐
相关产品推荐

