在 Windows 批处理语言中修改变量 [已关闭]

Modifying a variable in Windows Batch Language [closed]

提问人:Robin 提问时间:4/15/2023 最后编辑:CompoRobin 更新时间:4/15/2023 访问量:225

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

7个月前关闭。

我正在编写一个批处理文件来转换音乐文件,并将文件名保存在一个变量中。几个例子是: 或者也许David Bowie - Space Oddity.mp3David Bowie - Greatest Hits - Space Oddity.mp3

我想编辑变量,使其仅包含曲目名称。因此,我需要从末尾向后搜索,直到到达第一次出现 ,并丢弃它之前的所有内容(因为变量可能包含多个连字符)。Space Oddity{Hyphen}{Space}

请问您能建议一些批处理代码来实现这一点吗?

Windows 变量 batch-file 子字符串

评论

0赞 SomethingDark 4/15/2023
这回答了你的问题吗?批处理脚本 - 重命名文件,删除变量前缀和后缀具体来说,您需要使用通配符替换子字符串。它看起来像这样,您必须多次执行此操作,具体取决于要删除的“-”实例的数量。此外,对于重命名音乐文件,我建议使用 FileBot 或 TagScanner 等现有软件。set "mp3_name=%mp3_name:*- =%"

答:

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"