Dan*_*nov 92 arguments batch-file
我正在尝试在批处理文件中使用以下验证逻辑,但即使没有为批处理文件提供参数,"使用"块也永远不会执行.
if ("%1"=="") goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 <EnvironmentName>
exit 1
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Iai*_*ain 139
检查命令行参数是否已设置可以是[%1]==[],但正如Dave Costa 指出的那样,"%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
Run Code Online (Sandbox Code Playgroud)
小智 16
一个更高级的例子:
⍟无限论据.
⍟存在于文件系统(
file或者directory?)或通用string.⍟指定if是否为文件
⍟指定是一个目录
⍟ 没有扩展,可以在遗留脚本中工作!
⍟ 最小代码☺
@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
✨其他东西..✨
■in %~1- ~删除任何包装"或'.
■in %~s1- s使路径成为DOS 8.3 naming,这是一个很好的技巧,可以在检查东西时避免文件名中的空格(这样就不需要用更多的"s 包装资源了.
■ ["%~1"]==[""]"无法确定"如果参数是文件/目录或只是一个通用字符串,那么表达式使用括号和原始未修改%1(只是没有"包装,如果有的话)
如果没有参数,如果我们已经使用shift并且arg-list指针已经通过了最后一个,则表达式将被计算为[""]==[""].
■这是你可以在不使用更多技巧的情况下具体化的(它甚至可以在windows-95的批处理脚本中工作......)
保存为 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 Ninja - 无限制的参数处理,识别文件系统中是否存在,识别文件或目录
这是一个工作示例,可以获取任意数量的APK文件(Android应用程序)并通过调试控制台(ADB.exe)将它们安装在您的设备上: 使上一篇文章成为不使用ADB安装多语法的批量APK安装程序
Dav*_*sta 14
摆脱括号.
样本批处理文件:
echo "%1"
if ("%1"=="") echo match1
if "%1"=="" echo match2
Run Code Online (Sandbox Code Playgroud)
运行在脚本上方的输出:
C:\>echo ""
""
C:\>if ("" == "") echo match1
C:\>if "" == "" echo match2
match2
Run Code Online (Sandbox Code Playgroud)
我认为它实际上是将括号作为字符串的一部分,并且它们正在进行比较.
IF "%~1"=="" GOTO :Usage
Run Code Online (Sandbox Code Playgroud)
如果%1本身被引用,〜将取消引用%1.
""将保护免受特殊字符传递.例如,使用&ping调用脚本
| 归档时间: |
|
| 查看次数: |
93572 次 |
| 最近记录: |