【发布时间】:2017-12-09 22:20:36
【问题描述】:
这是我用来运行 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
)
【问题讨论】:
-
批处理文件中没有 OR 这样的东西。
-
@DarkMesa 你读过
or会很有趣。在命令提示符窗口中执行if /?时显示的帮助不包含有关or运算符的任何信息。 IF documentation in MS command line reference 没有提到运营商or。并且SS64 documentation for IF command 也不包含有关or运算符的信息。因此,为什么您认为 IF 应该在条件下支持or运算符会非常有趣。 -
@DarkMesa 不,您从未在 Windows 批处理文件中成功使用过 OR。
-
这里有两点: 1. Batch 文件中
if命令中没有or运算符。 2. 在支持or运算符的语言中,您需要重复比较,因为“或”本身不是比较:if "%CMD:~0,4%"=="menu" or "%CMD:~0,4%"=="back" ( goto cmd )