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 VarNameblock 检查。还要为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,它们具有更合理的语法和更少的奥秘功能。