我试图让这个批处理文件读取.txt并使用它找到的值(1,2或3)来选择要播放的歌曲。我写过这个,但它只有在.txt读取1但2和3不起作用时才有效。
@echo off
for /f %%i in (startsong.txt) do set ransongforintropicker=%%i
IF %ransongforintropicker% == 1 set ransongforintro=BloodMoon_by_VeoRug.mp3
IF %ransongforintro% == BloodMoon_by_VeoRug.mp3 set ransongforintrotext=Song: Blood Moon By VeoRug
IF %ransongforintropicker% == 2 timeout /t -1
IF %ransongforintro% == Invincible_by_VeoRug.mp3 set ransongforintrotext=Song: Invincible By VeoRug
IF %ransongforintropicker% == 3 set ransongforintro=GoldenMove_by_VeoRug.mp3
IF %ransongforintro% == GoldenMove_by_VeoRug set ransongforintrotext=Song: Golden Move By VeoRug
有人可以告诉我如何解决这个问题,或者告诉我一个更好的方法吗?
答案 0 :(得分:0)
在执行时遇到变量扩展的问题。您需要在脚本的顶部添加:
setlocal enabledelayedexpansion
重新编写代码(保留现有结构),可能会澄清问题:
@echo off
setlocal enabledelayedexpansion
set trackchoice=0
set trackfile=0
set trackinfo=0
for /f %%i in (trackchoice.txt) do set trackchoice=%%i
if %trackchoice% == 1 set trackfile=Lateralus.mp3
if %trackfile% == Lateralus.mp3 (
set trackinfo=Track: Lateralus
echo %trackfile%
echo !trackinfo! & echo.Artist: Tool
pause
)
if %trackchoice% == 2 set trackfile=Schism.mp3
if %trackfile% == Schism.mp3 (
set trackinfo=Track: Schism
echo %trackfile%
echo !trackinfo! & echo.Artist: Tool
pause
)
如果您想在任何时候播放.mp3,可以使用start命令。
答案 1 :(得分:0)
现在我终于回到了实际的键盘前面,我可以更准确地解决脚本问题。如果您绝对必须保留原始帖子中的格式,则您的代码无法使用2
或3
,因为您的if
语句不正确。
IF %ransongforintropicker% == 2 timeout /t -1
时, timeout
会运行2
命令,但不会设置ransongforintro变量,因此您的if语句会回复到IF == 2
,总是返回false。
在你上一篇if
语句中,你检查%ransongforintro%
对GoldenMove_by_VeoRug的值,但是在它之前的语句中,你将该变量设置为GoldenMove_by_VeoRug .mp3 ,所以if语句的计算结果为IF
GoldenMove_by_VeoRug == GoldenMove_by_VeoRug.mp3
,(再次)将始终返回false。
扩展我的评论,使用括号会阻止您将变量设置为不正确的值(这就是为什么3不起作用)或忘记完全设置它们(这就是为什么2不起作用)。
另外,我缩短了变量名称,因为我是通过手机发布的。
@echo off
for /F %%A in (startsong.txt) do set ransong=%%A
if %ransong%==1 (
set song=BloodMoon_by_VeoRug.mp3
set "songtitle=Blood Moon by VeoRug"
)
if %ransong%==2 (
set song=Invincible_by_VeoRug.mp3
set "songtitle=Invincible by VeoRug"
)
if %ransong%==3 (
set song=GoldenMove_by_VeoRug.mp3
set "songtitle=Golden Move by VeoRug"
)
答案 2 :(得分:0)
脚本:由 @SomethingDark 修改括号所在的位置:
@echo off
for /f %%i in (startsong.txt) do (
set ransongforintropicker=%%i
if %%i equ 1 (
set ransongforintro=BloodMoon_by_VeoRug.mp3
set ransongforintrotext=Song: Blood Moon By VeoRug
)
if %%i equ 2 (
rem timeout /t -1
set ransongforintro=Invincible_by_VeoRug.mp3
set ransongforintrotext=Song: Invincible By VeoRug
)
if %%i equ 3 (
set ransongforintro=GoldenMove_by_VeoRug.mp3
set ransongforintrotext=Song: Golden Move By VeoRug
)
)
echo ransongforintropicker %ransongforintropicker%
echo ransongforintro %ransongforintro%
echo ransongforintrotext %ransongforintrotext%
输出:
==>echo ^1>startsong.txt
==>..\29291082.bat
ransongforintropicker 1
ransongforintro BloodMoon_by_VeoRug.mp3
ransongforintrotext Song: Blood Moon By VeoRug
==>echo ^2>startsong.txt
==>..\29291082.bat
ransongforintropicker 2
ransongforintro Invincible_by_VeoRug.mp3
ransongforintrotext Song: Invincible By VeoRug
==>echo ^3>startsong.txt
==>..\29291082.bat
ransongforintropicker 3
ransongforintro GoldenMove_by_VeoRug.mp3
ransongforintrotext Song: Golden Move By VeoRug
==>echo ^4>startsong.txt
==>..\29291082.bat
ransongforintropicker 4
ransongforintro
ransongforintrotext
==>