如何在Powershell中提取CS:GO Demo文件内的de_前缀地图名称
用PowerShell从CS:GO Demo文件提取地图名称的解决方案
核心问题原因
CS:GO的Demo(.dem)是二进制格式文件,直接用Get-Content默认按文本格式读取会产生大量乱码,且头部内容中会出现多个含de_前缀的字符串,无法直接拿到有效地图名。
可行解决方案
代码实现
# 替换为你的demo文件实际路径 $demo = "C:\path\to\your\match.dem" # 正则规则:匹配de_开头、仅含小写字母/数字/下划线、符合官方地图命名规范的字符串 $pattern = '\bde_[a-z0-9_]{3,15}\b' # 仅读取Demo前1KB内容(头部元信息全部包含在内,无需读取整个大文件) $rawHeader = [System.IO.File]::ReadAllBytes($demo)[0..1023] # 转字符串后匹配所有符合规则的地图名,取第一个有效结果存入变量 $mapName = [Text.Encoding]::ASCII.GetString($rawHeader) | Select-String -Pattern $pattern -AllMatches | ForEach-Object { $_.Matches.Value } | Select-Object -First 1
代码说明
- 直接读取二进制前1024字节而非按文本读整个文件,性能更高,也避免了乱码干扰
- 正则添加了
\b单词边界限制,不会匹配到乱码中拼接的半截de_字符串 - 长度筛选规则适配所有官方竞技地图命名格式,返回结果纯净无多余字符
- 如果需要匹配社区地图(如
cs_、aim_前缀),可将正则修改为\b[a-z]{2,3}_[a-z0-9_]{3,15}\b即可
内容的提问来源于stack exchange,提问作者ad1k4h
相关产品推荐
相关产品推荐

