带有自定义命令的批处理文件

问题描述 投票:0回答:2

我正试图编写一个批处理文件,可以有多个命令。例如,如果我只是执行批处理文件,它就会正常运行,如果我带着参数执行该命令,它就会把我带到批处理的某个部分。这是我设法做到的代码。

@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...

谁能帮我解决这个问题?

batch-file
2个回答
1
投票

由于你的例子使用的是非常简单的单数参数,而这些参数在真正的工作脚本中不太可能被用作标签,这里有一个版本,它应该可以与你的任何标签一起工作,而不必使用。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
投票

%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
投票

当你在没有参数的情况下运行这个脚本时 %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
© www.soinside.com 2019 - 2024. All rights reserved.