我怎样才能容纳使用参数打开批处理文件
goto Item_%1
还是没有?
set /p x=Select:
goto Item_%x%
你到底想实现什么目标? 我的猜测是一个标签定位系统,当调用时会转到某个标签。
如果是这样,尝试检查 %~1 是否未发送参数将导致批处理失败,因为变量不存在。 如果未定义 %~1 也无法解决此问题。
这样做的方法是将您希望转到的标签分配给变量,并对变量进行如果未定义检查 - 启用延迟扩展
例:
@ECHO OFF
SETLOCAL enableDelayedExpansion
IF NOT DEFINED !LabelIS! GOTO default
IF DEFINED !LabelIS! GOTO !LabelIS!
:default
ECHO default starting label
pause
exit
:target
ECHO Arrived at target
pause
exit
注意:如果依赖用户输入来设置目标,则需要确定输入是否与有效标签相对应。
修正案:
If Not "%1"=="" goto somewhere
语法错误
正确的语法将执行所提出的问题:
If "%~1"=="" goto default
goto %~1
以下内容通过验证相应的标签是否存在来检查参数或输入。如果输入为空或标签不存在,它会不断向用户询问标签,显示可能的选项。(由于您可能不想向用户显示每个标签("内部"标签(,因此您可以通过添加<space>#
来隐藏一些标签 - 标签只是一个单词,第一个空格之后的所有内容都被忽略,但可以用来分散它们(
@echo off
setlocal
set "label=%~1"
:retry #
findstr /ix ":%label%" "%~f0" && goto %label%
echo Invalid or no Label given: [%label%]. Possible options:
for /f "delims=:" %%a in ('findstr /xr ":.*[^#]$" "%~f0"') do echo/ %%a
set /p "label=Label? "
goto :retry
:Item_1
echo reached Item_1
goto :eof
:anotherlabel
echo reached anotherlabel
goto :eof
:errorhandling #
echo to demonstrate a hidden label
goto :eof