从文本文件中发出读取值并将其传递给if条件

时间:2015-03-27 00:02:44

标签: windows batch-file

我试图让这个批处理文件读取.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

有人可以告诉我如何解决这个问题,或者告诉我一个更好的方法吗?

3 个答案:

答案 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)

现在我终于回到了实际的键盘前面,我可以更准确地解决脚本问题。如果您绝对必须保留原始帖子中的格式,则您的代码无法使用23,因为您的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

==>