Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 启动/调用批处理文件时,如何检查是否定义了参数?_Batch File_Arguments - Fatal编程技术网

Batch file 启动/调用批处理文件时,如何检查是否定义了参数?

Batch file 启动/调用批处理文件时,如何检查是否定义了参数?,batch-file,arguments,Batch File,Arguments,我试图在批处理文件中使用以下验证逻辑,但即使没有向批处理文件提供任何参数,“usage”块也不会执行 if ("%1"=="") goto usage @echo This should not execute @echo Done. goto :eof :usage @echo Usage: %0 <EnvironmentName> exit 1 如果(“%1”==”)转到用法 @这不应该执行 @回音完毕。 后藤:eof :用法 @回显用法:%0 出口1 我做错了什么?检

我试图在批处理文件中使用以下验证逻辑,但即使没有向批处理文件提供任何参数,“usage”块也不会执行

if ("%1"=="") goto usage

@echo This should not execute

@echo Done.
goto :eof

:usage
@echo Usage: %0 <EnvironmentName>
exit 1
如果(“%1”==”)转到用法
@这不应该执行
@回音完毕。
后藤:eof
:用法
@回显用法:%0
出口1

我做错了什么?

检查是否设置了命令行参数可以是
[%1]=[]
,但是,
%1==”
也会起作用

我还修复了用法echo中的语法错误,以转义大于和小于符号。此外,
exit
需要一个
/B
参数,否则
CMD.exe
将退出

@echo off

if [%1]==[] goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 ^<EnvironmentName^>
exit /B 1
@echo关闭
如果[%1]=[]转到使用情况
@这不应该执行
@回音完毕。
后藤:eof
:用法
@回显用法:%0^
退出/B 1

去掉括号

批处理文件示例:

echo "%1"

if ("%1"=="") echo match1

if "%1"=="" echo match2
运行上述脚本的输出:

C:\>echo "" 
""

C:\>if ("" == "") echo match1 

C:\>if "" == "" echo match2 
match2
我认为它实际上是将括号作为字符串的一部分,并对它们进行比较

IF "%1"=="" GOTO :Continue
.....
.....
:Continue
IF "%1"=="" echo No Parameter given
~如果引用了%1本身,则将取消引用%1

“”将防止传递特殊字符。例如,使用ping调用脚本(&p)

更高级的示例: ⍟ 无限制的争论

⍟ 存在于文件系统上(文件
或目录
目录
?)或通用
字符串

⍟ 指定是否为文件

⍟ 指定是一个目录

⍟ 没有扩展,将在遗留脚本中工作

⍟ 最小码☺


identifier.cmd“c:\Program Files(x86)\Microsoft Office\OFFICE11\WINWORD.EXE”
并且得到

exist is a directory done exist is a file done exist is a directory exist is a file exist is a file not exist done. 当然,它可能要复杂得多, 但是好的例子应该总是简单和最少。:)

希望它能帮助任何人:) 此处发布:

下面是一个工作示例,它可以获取任意数量的APK文件(Android应用程序),并通过调试控制台(ADB.exe)将其安装到您的设备上:

如果“%1”==”将失败,则此操作的所有版本都将在以下情况下失败 某些有毒的性格条件。
仅当定义或未定义是安全的时

这与其他答案相同,但仅使用一个标签并将用法放在第一位,这还使其成为脚本的一种文档,通常也放在顶部:

@echo off
:: add other test for the arguments here...
if not [%1]==[] goto main
:: --------------------------
echo This command does something.
echo.
echo %0 param%%1 param%%2
echo       param%%1 the file to operate on
echo       param%%1 another file

:: --------------------------
exit /B 1

:main
:: --------------------------
echo do something with all arguments (%%* == %*) here...

但是,如果您不必使用cmd/batch,请在WSL或powershell上使用bash,它们的语法更为合理,功能也更少神秘。

[%1]==[]比“%1”==”,因为它可以正确处理%1本身包含双引号的情况。%1“==”将出现“此时意外”消息错误。请注意,如果您没有使用命令行参数,而是使用
设置
变量(我不知道正确的批处理术语),您可能希望使用
%myvar%”“==”
,因为如果
myvar
中有空格且没有引号,您将得到“此时意外”消息。@如果未定义VarName,则可以使用
块检查Pat集合变量。另外,由于在比较中没有使用引号,对tukushan也加1。不要这样做。决不会。
“%$1”==”
也会起作用,并处理以下情况:%1有双引号
“%$1”==”
处理变量中的空格,而
[]
版本没有。
如果“%1”==”
如果arg有空格,则会崩溃。例如:
run.bat“a b”
@如果“%~1”==”
这是最佳答案,amr将使用
的最佳答案。其他答案适用于某些情况,但对于像
run.bat“a b”
@wisbucky这样似乎没有问题的特殊情况,则会失败。我遗漏了什么?@ruffin,例如:
run.bat”“
将不会被
[%1]=[]
捕获。这会导致
run.bat“a b”
崩溃,如果[未]定义…
不能与
%1
这样的参数一起工作。你有没有一个例子,如果“%~1”
不起作用?
可能与@double beep重复-这里的问题(由daniel fortunov提出)是在你提到的问题发布前一年首先提出的。哪一个是(可能的)重复?@KevinFegan,因为另一个问题有更多的观点和答案。 exist is a directory exist is a file exist is a file not exist done.
@echo off
:: add other test for the arguments here...
if not [%1]==[] goto main
:: --------------------------
echo This command does something.
echo.
echo %0 param%%1 param%%2
echo       param%%1 the file to operate on
echo       param%%1 another file

:: --------------------------
exit /B 1

:main
:: --------------------------
echo do something with all arguments (%%* == %*) here...