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

pbgvytdp  于 2023-04-22  发布在  Windows
关注(0)|答案(3)|浏览(143)

**已关闭。**此问题正在寻求书籍,工具,软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答案。

我们不允许您提问有关书籍、工具、软件库等方面的建议。您可以编辑问题,以便您可以通过事实和引用来回答问题。
6天前关闭。
Improve this question
我正在编写一个批处理文件来转换音乐文件,并将文件名保存在变量中。下面是几个例子:David Bowie - Space Oddity.mp3或者David Bowie - Greatest Hits - Space Oddity.mp3
我想编辑变量,使其只包含曲目名称Space Oddity。因此,我需要从末尾向后搜索,直到第一次出现{Hyphen}{Space},并丢弃它之前的所有内容,(因为变量可能包含多个连字符)
请你建议一些批处理代码来实现这一点?

tvokkenx

tvokkenx1#

我认为这是最简单的方法:

for %%a in ("%filename: - =\%") do set "track=%%~Na"
5kgi1eie

5kgi1eie2#

@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 /?从提示符-使用字符串作为文件名,并使用构成文件名的各个部分(驱动器,路径,名称和扩展名)的标准解释。

tv6aics1

tv6aics13#

您可以使用更完整的脚本语言,例如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

相关问题