如何在调用batch file时检查是否定义了一个参数?
我试图在batch file中使用以下validation逻辑,但即使没有参数提供给batch file,“使用情况”块也不会执行。
if ("%1"=="") goto usage @echo This should not execute @echo Done. goto :eof :usage @echo Usage: %0 <EnvironmentName> exit 1
我究竟做错了什么?
检查命令行参数是否已设置可以是[%1]==[]
,但是,正如Dave Costa 指出的那样 , "%1"==""
也将起作用。
我还修复了使用echo中的语法错误以避免大于号和小于号。 另外, exit
需要a /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
摆脱括号。
示例batch file:
echo "%1" if ("%1"=="") echo match1 if "%1"=="" echo match2
运行上面的脚本输出:
C:\>echo "" "" C:\>if ("" == "") echo match1 C:\>if "" == "" echo match2 match2
我认为实际上是把括号作为string的一部分,并将它们进行比较。
一个更高级的例子:
⍟无限论据。
⍟存在于文件系统(
file
或directory
?)或通用string
。⍟指定是否是文件
⍟指定是一个目录
⍟ 没有扩展,将在传统脚本中工作!
⍟ 最小的代码☺
@echoclosures :循环 :: --------------------------有参数? if [“%〜1”] == [“”]( 回声完成。 转到最后 ) :: --------------------------参数存在吗? 如果不存在%〜s1( 回声不存在 )else( 回声存在 如果存在%〜s1 \ NUL( 回声是一个目录 )else( 回声是一个文件 ) ) :: -------------------------- 转移 转到循环 :结束 暂停
✨其他东西…✨
■在%~1
– 删除任何包装"
或'
。
■在%~s1
– s
使得path为DOS 8.3 naming
,这是一个很好的技巧,可以在检查文件时避免文件名中的空格(这样就不需要用更多的资源来包装资源。
■如果参数是一个文件/目录或者只是一个普通的string, ["%~1"]==[""]
“不能确定”,所以expression式使用括号和原始的未修改的%1
没有"
包装,如果有的话..)
如果没有使用shift
的参数,并且arg-list指针已经通过了最后一个,则expression式将被评估为[""]==[""]
。
■这是非常具体的,你可以不使用更多的技巧(即使在windows-95的批处理脚本中也是如此)
■执行示例
将其保存为identifier.cmd
它可以识别一个无限制的参数(通常你只限于%1
– %9
),只要记住使用倒逗号来包装参数,或者使用8.3命名,或者拖放它们(它会自动执行上述任一操作)。
这允许您运行以下命令:
⓵identifier.cmd identifier.cmd c:\windows
并获取
存在 是一个目录 DONE
⓶identifier.cmd identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
并获取
存在 是一个文件 DONE
⓷和多个参数(当然这是完整的交易..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
并得到
存在 是一个目录 存在 是一个文件 存在 是一个文件 不存在 完成。
自然它可能会更复杂, 但好的例子应该总是简单和最小化。 🙂
希望它有助于任何人:)
发表在这里: CMD忍者 – 无限论证处理,识别如果存在于文件系统中,识别文件或目录
这里是一个工作的例子,它可以获取任意数量的APK文件(Android应用程序),并通过debugging控制台(ADB.exe)将它们安装在您的设备上: 使以前的post一个Mass安装程序不使用ADB安装多语法
IF "%~1"=="" GOTO :Usage
〜如果%1本身被引用,将会删除%1。
“”将保护传递的特殊字符。 例如用&ping来调用脚本
IF "%1"=="" GOTO :Continue ..... ..... :Continue IF "%1"=="" echo No Parameter given