提问人:Robin 提问时间:4/15/2023 最后编辑:CompoRobin 更新时间:4/15/2023 访问量:225
在 Windows 批处理语言中修改变量 [已关闭]
Modifying a variable in Windows Batch Language [closed]
问:
闭。这个问题正在寻求有关书籍、工具、软件库等的建议。它不符合 Stack Overflow 准则。它目前不接受答案。
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。
7个月前关闭。
我正在编写一个批处理文件来转换音乐文件,并将文件名保存在一个变量中。几个例子是: 或者也许David Bowie - Space Oddity.mp3
David Bowie - Greatest Hits - Space Oddity.mp3
我想编辑变量,使其仅包含曲目名称。因此,我需要从末尾向后搜索,直到到达第一次出现 ,并丢弃它之前的所有内容(因为变量可能包含多个连字符)。Space Oddity
{Hyphen}{Space}
请问您能建议一些批处理代码来实现这一点吗?
答:
1赞
Magoo
4/15/2023
#1
@ECHO OFF
SETLOCAL
SET "var=David Bowie - Space Oddity.mp3"
FOR %%e IN ("%var%") DO SET "var=%%~ne"
FOR %%e IN ("%var:- =.%") DO SET "var=%%~xe"
SET "var=%var:~1%"
SET var
ECHO ---------------
SET "var=David Bowie - Greatest Hits - Space Oddity.mp3"
FOR %%e IN ("%var%") DO SET "var=%%~ne"
FOR %%e IN ("%var:- =.%") DO SET "var=%%~xe"
SET "var=%var:~1%"
SET var
ECHO ---------------
SET "var=Voices in the Sky - The Best of the Moody Blues The Moody Blues 05 - I'm Just a Singer (In a Rock and Roll Band).mp3"
FOR %%e IN ("%var%") DO SET "var=%%~ne"
FOR %%e IN ("%var:- =.%") DO SET "var=%%~xe"
SET "var=%var:~1%"
SET var
GOTO :EOF
第一个删除扩展名;第二个修改每个,然后抓住扩展,最后一个删除前导。for
-
.
set
.
所有这些都基于提示 - 使用字符串作为文件名,并使用构成文件名各个部分(驱动器、路径、名称和扩展名)的标准解释。for /?
评论
1赞
Stephan
4/15/2023
。然后是包含点的标题(很抱歉玷污了您的答案)
0赞
Compo
4/15/2023
#2
您可以获得更完整的脚本语言(例如 PowerShell)的帮助:
例子:
@Set "FileName=David Bowie - Space Oddity.mp3"
@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "('%FileName%' -Split '- ')[-1]"
@Pause
@Set "FileName=David Bowie - Greatest Hits - Space Oddity.mp3"
@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "('%FileName%' -Split '- ')[-1]"
@Pause
如果您希望将子字符串重新传播到变量名称中,请使用循环。FOR /F
例:
@Set "FileName=David Bowie - Greatest Hits - Space Oddity.mp3"
@For /F "EOL=? Delims=" %%G In ('
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command
"('%FileName%' -Split '- ')[-1]"') Do @Set "FileName=%%~nG"
@Set Filename
@Pause
2赞
Aacini
4/15/2023
#3
我认为这是最简单的方法:
for %%a in ("%filename: - =\%") do set "track=%%~Na"
评论
set "mp3_name=%mp3_name:*- =%"