如何在使用 Windows 批处理文件时替换星号

问题描述 投票:0回答:1

我正在使用 mediainfo 从音频文件中提取元数据,然后使用其信息生成文件夹树。由于此元数据允许使用星号等特殊字符,因此无法生成文件夹。我似乎无法使用此脚本替换星号。我相信这可能与

*
是通配符这一事实有关。对我有什么想法或问题吗?

[mcve]

@echo off
setlocal enabledelayedexpansion

set "album_name=F*ck Love (Savage)"

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

set album_folder

endlocal

我期待以下结果:

album_folder=F_ck Love (Savage)

我尝试了各种不同的方法来尝试更换

*
,但无济于事。

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

我肯定错过了什么。

batch-file special-characters wildcard variable-expansion
1个回答
0
投票

被问过很多次。没有通用的解决方案 afaiaa.

你可以使用这样的东西:

SETLOCAL

SET "string=hello*this&is*a*string"
:loop
FOR /f "tokens=1*delims=&*" %%b IN ("%string%") DO IF "%%c" neq "" SET "string=%%b_%%c"&GOTO loop

SET str

它并不完美,但可能足以满足您的应用。

OTT,如果您能够使用 3rd 方实用程序,那么

sed
(g)awk
可能是一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.