Answers:
检查是否已设置命令行参数可以是[%1]==[]
,但是正如Dave Costa 指出的那样,"%1"==""
也可以。
我还修复了用法回显中的语法错误,以避开大于和小于符号。另外,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
set
变量(我不知道正确的批处理术语),则可能要使用,"%myvar%"==""
因为如果其中myvar
有空格且未加引号,则此时将得到“意外的“ 信息。
IF NOT DEFINED VarName
block 检查。还要为tukushan +1(因为未在比较中使用引号)。只是不要这样做。决不。
"%~1"==""
还将努力并采取了这样的情况,其中1%有双引号
"%~1"==""
在[]
版本中不处理变量中的空格。
一个更高级的示例:
⍟无限的争论。
⍟存在于文件系统(
file
或directory
?)或通用文件上string
。⍟指定是否为文件
⍟指定是目录
⍟ 没有扩展名,可以在旧脚本中使用!
⍟ 最少的代码☺
@回声关闭 :循环 :: --------------------------有论点吗? 如果[“%〜1”] == [“”]( 回声完成。 转到结尾 ) :: --------------------------参数存在吗? 如果不存在%〜s1( 回声不存在 )其他( 回声存在 如果存在%〜s1 \ NUL( echo是一个目录 )其他( 回声是一个文件 ) ) :: -------------------------- 转移 转到循环 :结束 暂停
stuff其他东西..✨
■在%~1
-在~
删除任何包装"
或'
。
■在%~s1
-将s
使得路径是DOS 8.3 naming
,这是一个很好的办法来避免空格的文件名,而检查的内容(而这种方式不需要更多的包裹资源"
秒。
■ ["%~1"]==[""]
如果参数是文件/目录还是仅是通用字符串,则“不确定”,因此表达式使用方括号,而原始未修改%1
("
如果没有包装,则为自动包装。)
如果没有使用过的参数,shift
并且arg-list指针已通过最后一个参数,则表达式将被计算为[""]==[""]
。
■这是您无需使用更多技巧就可以做到的特别具体(即使在Windows 95的批处理脚本中也可以使用...)
另存为 identifier.cmd
它可以识别无限个参数(通常只限于%1
- %9
),只记得记住用引号将它们包装起来,或者使用8.3命名或将其拖放(上面的操作会自动执行)。
这使您可以运行以下命令:
⓵identifier.cmd c:\windows
和得到
存在 是一个目录 做完了
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
和得到
存在 是一个文件 做完了
⓷和多个参数(当然,这是全部交易。)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
并得到
存在 是一个目录 存在 是一个文件 存在 是一个文件 不存在 完成。
自然,它可能要复杂得多, 但是好的示例应该总是简单而最少的。:)
在此处发布:CMD Ninja-无限参数处理,标识文件系统中是否存在,标识文件或目录
这是一个工作示例,该示例可以接收任意数量的APK文件(Android应用),并通过调试控制台(ADB.exe)将其安装到您的设备上: 使以前的帖子成为不使用ADB Install-Multi语法的Mass APK安装程序
这与其他答案相同,但仅使用一个标签并将使用情况放在第一位,这另外使它成为脚本的一种文档推荐,通常也放在顶部:
@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,它们具有更合理的语法和更少的奥秘功能。