我正试图编写一个批处理文件,可以有多个命令。例如,如果我只是执行批处理文件,它就会正常运行,如果我带着参数执行该命令,它就会把我带到批处理的某个部分。这是我设法做到的代码。
@echo off
if not defined %1 goto 2
if %1 equ 1 goto 1
:1
echo 1
pause
exit /b
:2
echo 2
pause
但是这段代码有一个问题 我们如何定义%1?当我在没有任何参数的情况下运行批处理文件时,输出是.1。
2
Press any key to continue...
谁能帮我解决这个问题?
由于你的例子使用的是非常简单的单数参数,而这些参数在真正的工作脚本中不太可能被用作标签,这里有一个版本,它应该可以与你的任何标签一起工作,而不必使用。if
提前对每个标签进行比较。
@Echo Off
SetLocal EnableExtensions
If Not "%~1" == "" %__AppDir__%findstr.exe /ILX ":%~1" "%~f0">NUL && GoTo %~1
:NoArg
Echo No valid argument was received & Pause
GoTo :EOF
:UserName
Echo %%UserName%% = %UserName% & Pause
GoTo :EOF
:ComputerName
Echo %%ComputerName%% = %ComputerName% & Pause
GoTo :EOF
:UserDomain
Echo %%UserDomain%% = %UserDomain% & Pause
GoTo :EOF
:Date
Echo %%Date%% = %Date% & Pause
GoTo :EOF
:Time
Echo %%Time%% = %Time% & Pause
GoTo :EOF
我在每一个标签上都放了例子代码,以示示范。(你显然可以调整你的,以适应你的具体需要).
该 FindStr
命令用于读取脚本中所有以冒号开头的行。:
, (即标签),后面是不区分大小写的输入参数。如果没有收到输入参数或者匹配失败,将使用默认的第一个标签。
%1
只有在您向文件传递参数时才会定义,所以如果您没有传递任何参数,它将总是使 if %1 not defined
比较为真。如果你想在运行脚本时定义%1,我建议这样做。
@echo off
set var=%1
:start
if not defined %var% goto set
if %var% equ "1" goto 1
:set
Setlocal Enabledelayedexpansion
set /p var="What arguments do you want to pass? "
:1
echo 1
pause
exit /b
:2
echo 2
pause
当你在没有参数的情况下运行这个脚本时 %1
是空的,所以你会得到这一行。
if not defined goto 2
你要做的是确保你最后不会有任何空的东西。
@echo off
if "%~1" equ "" goto 2
if "%~1" equ "1" goto 1
:1
echo 1
pause
exit /b
:2
echo 2
pause