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

如何在Windows批处理文件中替换MediaInfo元数据中的星号

批处理替换音频元数据中的星号失败问题

我用MediaInfo提取音频文件的元数据,打算用这些信息生成文件夹目录,但元数据里包含星号这类特殊字符,导致无法创建文件夹。尝试用批处理脚本替换星号却一直失败,推测是因为星号在批处理里是通配符的缘故。

最小可复现示例

@echo off
setlocal enabledelayedexpansion
set "album_name=Make Sh*t Happen"
set "album_folder=!album_name:*=_!"
set album_folder
endlocal

实际运行结果

album_folder=_

期望结果

album_folder=Make Sh_t Happen

我试过多种方法替换星号都无效,比如:

set "album_folder=!album_folder:^*=_!"

解决方法

批处理的变量替换语法中,*作为第一个字符时会被当作通配符,匹配变量开头的所有内容,所以直接用!var:*=_!会把整个变量替换成_,这就是你失败的原因。下面提供两种可靠的解决方式:

方法1:借助PowerShell替换

利用PowerShell的正则替换功能,可以轻松处理星号这类特殊字符,兼容性良好:

@echo off
setlocal enabledelayedexpansion
set "album_name=Make Sh*t Happen"
:: 用PowerShell将所有*替换为_
for /f "delims=" %%a in ('powershell -Command "$env:album_name -replace '\*', '_'"') do set "album_folder=%%a"
set album_folder
endlocal

方法2:纯批处理字符替换

如果不想依赖PowerShell,可以用临时标记中转的方式实现:

@echo off
setlocal enabledelayedexpansion
set "album_name=Make Sh*t Happen"
:: 先把*替换为临时标记(这里用#,可换成元数据中不存在的字符)
call set "album_folder=%%album_name:*=#%%"
:: 再把临时标记替换为_
set "album_folder=!album_folder:#=_!"
set album_folder
endlocal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:00:33