我怎么可以检查,如果争论定义时,开始/叫一批文件?
-
06-07-2019 - |
题
我想用下面的验证逻辑中的一批文件,但是"使用"框从未执行,即使没有参数提供给的批文件。
if ("%1"=="") goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 <EnvironmentName>
exit 1
我做错了什么?
解决方案
检查是否已设置命令行参数可以是 [%1] == []
,但是,如 Dave Costa 指出,&quot;%1&quot; ==&quot;&quot;
也可以。
我还修复了使用回显中的语法错误,以逃避大于号和小于号的符号。此外, 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
其他提示
一个更高级的例子:
⍟无限的参数。
⍟存在于文件系统(既
file
或directory
?) 或一个通用的string
.⍟指定,如果是文件
⍟指定为一个目录
⍟ 没有 扩展,将工作中的传统剧本!
⍟ 最小的代码上传视频
@echo off :loop ::-------------------------- has argument ? if ["%~1"]==[""] ( echo done. goto end ) ::-------------------------- argument exist ? if not exist %~s1 ( echo not exist ) else ( echo exist if exist %~s1\NUL ( echo is a directory ) else ( echo is a file ) ) ::-------------------------- shift goto loop :end pause
✨其他的东西..✨
■在 %~1
-对 ~
删除的任何包裹 "
或 '
.
■在 %~s1
-对 s
使路径可以 DOS 8.3 naming
, ,这是一个很好的招,以避免空间在文件名称虽然检查的东西(并通过这种方式没有必要将资源与多 "
s.
■ ["%~1"]==[""]
"不能肯定"如果参数是一个文件的目录或者只是一个通用串呢,所以相反的表达,使用方括号和原未经修改的 %1
(只是没有 "
包装,如果任何..)
如果没有人争论,如果我们使用 shift
和arg表指针已经过去了最后一个,则表达将评估 [""]==[""]
.
■这是尽可能多的具体你可以不采用更多的技巧(会的工作,即使在windows95的批-脚本...)
■执行的实例
拯救它 identifier.cmd
它可以识别一个不限参数(通常是有限的 %1
-%9
),只要记住来包裹参与反逗号,或使用8.3命名,或拖拉他们上(它不会自动的)。
这让你跑的如下命令:
⓵identifier.cmd c:\windows
并得到
exist is a directory done
⓶identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
并得到
exist is a file done
⓷和多个参数 (当然,这是整个交易..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
并得到
exist is a directory exist is a file exist is a file not exist done.
当然它可以是一个很大更加复杂, 但是很好的例子应该总是简单和最小的。 :)
希望它有助于任何人:)
发表了这里:CMD忍者-无限的参数处理,确定如果存在文件系统,确定如果文件或文件目录
这里是工作的例子,采取的任何数量的。(安卓应用程序),并将其安装在设备上通过调试-控制台(ADB.exe):让前后一个质量备,不使用亚行安装的多语法
摆脱括号。
示例批处理文件:
echo "%1"
if ("%1"=="") echo match1
if "%1"=="" echo match2
在脚本上方运行输出:
C:\>echo ""
""
C:\>if ("" == "") echo match1
C:\>if "" == "" echo match2
match2
我认为它实际上是将括号作为字符串的一部分并进行比较。
IF "%~1"=="" GOTO :Usage
如果引用%1本身,〜将取消引用%1。
&QUOT; &QUOT;将保护免受通过的特殊字符。例如,用&amp; ping
调用脚本IF "%1"=="" GOTO :Continue
.....
.....
:Continue
IF "%1"=="" echo No Parameter given
IF&quot;%1&quot; ==&quot;&quot;将失败,所有版本的将失败 某些毒药特征条件。 只有在定义或未定义的情况下才是安全的
这与其他答案相同,但只使用一个标签并将使用放在首位,这也使它成为脚本的一种文档表达,通常也放在顶部:
@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,它们具有更清晰的语法和更少的神秘功能。