打开带/不带参数的批处理文件



我怎样才能容纳使用参数打开批处理文件

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

最新更新