Batch file 批处理文件变量操作

Batch file 批处理文件变量操作,batch-file,Batch File,有人知道为什么这不起作用吗?我希望它请求一个字符串,例如1、2或exampletext。然后检查输入值是否为1,然后将变量更改为ABC,如果为2,则更改为DEF,否则保持不变 @echo off set /p id="Enter ID: " %=% IF "%id%" == "1"( set id="ABC" ) ELSE ( IF "%id%" == "2"( set id="DEF" ) ELSE ( PING 127.0.0.1 -n 0.1

有人知道为什么这不起作用吗?我希望它请求一个字符串,例如1、2或exampletext。然后检查输入值是否为1,然后将变量更改为ABC,如果为2,则更改为DEF,否则保持不变

@echo off
set /p id="Enter ID: " %=%
IF "%id%" == "1"(
   set id="ABC"
)
ELSE (
   IF "%id%" == "2"(
      set id="DEF"
   )
   ELSE (
      PING 127.0.0.1 -n 0.1 >nul  
   )
)
Start "" "C:\Users\Comp\Desktop\livestreamer-1.5.2-win32\livestreamer.exe" twitch.tv/%id% mobile_High

您只是缺少了几个空格(在
if
中的左括号之前)。和
else
需要与右括号“”在同一行:

IF "%id%" == "1" (
   set id=ABC
) ELSE (
   IF "%id%" == "2" (
      set id=DEF
   ) ELSE (
      PING 127.0.0.1 -n 0.1 >nul  
   )
)
还请注意,
集合
=
后面的引号会逐字包含在变量中,这不是您想要的

您还可以稍微简化一下:

if "%id%=="1" (
  set id=ABC
) else if "%id%=="2" (
  set id=DEF
) else (
  ping localhost -n 1 >nul
)


在第一页的帮助if中甚至有这样的解释:“ELSE子句必须与if后面的命令出现在同一行。”

您只是缺少了一些空格(在if中的左括号之前)。和
else
需要与右括号“”在同一行:

IF "%id%" == "1" (
   set id=ABC
) ELSE (
   IF "%id%" == "2" (
      set id=DEF
   ) ELSE (
      PING 127.0.0.1 -n 0.1 >nul  
   )
)
还请注意,
集合
=
后面的引号会逐字包含在变量中,这不是您想要的

您还可以稍微简化一下:

if "%id%=="1" (
  set id=ABC
) else if "%id%=="2" (
  set id=DEF
) else (
  ping localhost -n 1 >nul
)


在第一页的帮助if中甚至有这样的解释:“ELSE子句必须与if后面的命令出现在同一行。”

尽管Joey已经指出了错误的原因,但我还是忍不住要向您展示一种不同的方法:

@echo off
setlocal EnableDelayedExpansion

rem Define the table of equivalences:
set equiv[1]=ABC
set equiv[2]=DEF

set /p "id=Enter ID: " %=%
if defined equiv[%id%] (
   set id=!equiv[%id%]!
) ELSE (
   PING 127.0.0.1 -n 0.1 >nul  
)
Start "" "C:\Users\Comp\Desktop\livestreamer-1.5.2-win32\livestreamer.exe" twitch.tv/%id% mobile_High

此方法使用数组。如果您对这种方法感兴趣,请搜索“延迟扩展”和“批处理数组”。

尽管Joey已经指出了错误的原因,但我还是忍不住要向您展示一种不同的方法:

@echo off
setlocal EnableDelayedExpansion

rem Define the table of equivalences:
set equiv[1]=ABC
set equiv[2]=DEF

set /p "id=Enter ID: " %=%
if defined equiv[%id%] (
   set id=!equiv[%id%]!
) ELSE (
   PING 127.0.0.1 -n 0.1 >nul  
)
Start "" "C:\Users\Comp\Desktop\livestreamer-1.5.2-win32\livestreamer.exe" twitch.tv/%id% mobile_High

此方法使用数组。如果您对这种方法感兴趣,请搜索“延迟扩展”和“批量阵列”。

非常感谢!我不知道1-2个空格会导致错误。我对批处理编码还是新手。非常感谢!我不知道1-2个空格会导致错误。我对批处理编码还是新手。它使用了几个看起来像数组的环境变量;)-但实际上,如果可能值的列表变长,这是一个不错的选择?批处理中没有单个数组<代码>:-)@endro:对不起,“安斯加”,我忘了<代码>;-)它使用几个看起来像数组的环境变量;)-但实际上,如果可能值的列表变长,这是一个不错的选择?批处理中没有单个数组<代码>:-)@endro:对不起,“安斯加”,我忘了<代码>;-)