这是我用来运行Index.bat的脚本:
:parsefind
call Index.bat
显然,Index.bat变得疯狂并且一直忽略“if”并打开所有目录。我尝试在批处理文件中设置“tofind”而不是Index.bat,但它似乎没有改变任何东西。我也尝试删除“(”(没有修复)并且不得不放“_”因为它会弄乱“或”。我制作了更大的批处理文件,从来没有遇到过这个问题。我也注意到了“(”在Notepad ++语法中没有突出显示,出了什么问题?
Set tofind=%cmd:~6%
if "%tofind%"=="weapons_ability" or "weapons_abilities" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities"
)
if "%tofind%"=="weapons" or "weps" (
start "" "%cd%\unpacked\items\active\weapons"
)
if "%tofind%"=="melee" or "melee_weapons" (
start "" "%cd%\unpacked\items\active\weapons\melee"
)
if "%tofind%"=="ranged" or "ranged_weapons" (
start "" "%cd%\unpacked\items\active\weapons\ranged"
)
if "%tofind%"=="axe_abilities" or "axe_ability" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities\axe"
)
if "%tofind%"=="broadsword_abilities" or "broadsword_ability" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities\broadsword"
)
if "%tofind%"=="generic_abilities" or "generic_ability" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities\generic"
)
if "%tofind%"=="hammer_abilities" or "hammer_ability" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities\hammer"
)
if "%tofind%"=="shortsword_abilities" or "shortsword_ability" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities\shortsword"
)
if "%tofind%"=="spear_abilities" or "spear_ability" (
start "" "%cd%\unpacked\items\active\weapons\melee\abilities\spear"
)
if "%tofind%"=="staff" or "staffs" (
start "" "%cd%\unpacked\items\active\weapons\staff"
)
if "%tofind%"=="staff_abilities" or "staff_ability" (
start "" "%cd%\unpacked\items\active\weapons\staff\abilities"
)
if "%tofind%"=="staff_effectzone" or "staffs_effectzone" (
start "" "%cd%\unpacked\items\active\weapons\staff\abilities\effectzone"
)
if "%tofind%"=="staff_controlprojectile" or "staffs_econtrolprojectile" (
start "" "%cd%\unpacked\items\active\weapons\staff\abilities\controlprojectile"
)
if "%tofind%"=="staff_guidedbolt" or "staffs_guidedbolt" (
start "" "%cd%\unpacked\items\active\weapons\staff\abilities\guidedbolt"
)
if "%tofind%"=="staff_tesla" or "teslastaff" (
start "" "%cd%\unpacked\items\active\weapons\staff\testlastaff"
)
if "%tofind%"=="wand" or "wands" (
start "" "%cd%\unpacked\items\active\weapons\wand"
)
if "%tofind%"=="whip" or "whips" (
start "" "%cd%\unpacked\items\active\weapons\whip"
)
if "%tofind%"=="whip_ability" or "whip abilities" (
start "" "%cd%\unpacked\items\active\weapons\whip\abilities"
)
goto find
)
答案 0 :(得分:2)
如上所述,您的if
语法不正确
FOR %%a IN (
"generic_abilities,generic_ability$%cd%\unpacked\items\active\weapons\melee\abilities\generic"
"hammer_abilities,hammer_ability$%cd%\unpacked\items\active\weapons\melee\abilities\hammer"
) DO FOR /f "tokens=1*delims=$" %%w IN (%%a) DO (
FOR %%i IN (%%w) DO IF /i "%%i"=="%tofind%" ECHO START "" "%%x"
)
这是一种做同样容易维护的方法。
注释:
逗号分隔的选项字符串的数量没有实际限制 - 我使用了两个,但十个没有问题
for/f
分割%%a
上的字符串$
,分配给%%w
和%%x
/i
强制不区分大小写if
结果start
命令仅仅echo
用于测试。删除echo
关键字以执行start
。
答案 1 :(得分:1)
这个答案只是向用户显示运行Windows批处理文件时OR
不是IF
命令的选项。
给出以下代码。
@Echo off
set /P "cmd=enter cmd:"
if "%CMD:~0,4%"=="menu" or "back" ( goto cmd )
echo after if
pause
GOTO :EOF
:cmd
echo In cmd function
pause
GOTO :EOF
我们现在将从cmd提示符运行批处理文件,第一次进入菜单,第二次进入。
C:\temp>so.bat
enter cmd:menu
'or' is not recognized as an internal or external command,
operable program or batch file.
after if
Press any key to continue . . .
C:\temp>so.bat
enter cmd:back
after if
Press any key to continue . . .
C:\temp>
正如您在输出中看到的,它不会执行CMD标签。 IF命令第一次与菜单输入匹配,然后输出OR
命令不是命令的错误。第二次运行时,字符串比较不相等,因为back不等于菜单。