我想用下面的验证逻辑中的一批文件,但是"使用"框从未执行,即使没有参数提供给的批文件。

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

其他提示

一个更高级的例子:

⍟无限的参数。

⍟存在于文件系统(既 filedirectory?) 或一个通用的 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,它们具有更清晰的语法和更少的神秘功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top