【发布时间】:2017-04-02 02:41:50
【问题描述】:
基本上,下面的脚本可以以三种不同的方式使用: 调用 foo
.bat boot_up "path".bat halt "path".bat ssh "path" "command"
我不能保证路径或命令没有空格。
当我使用 foo.bat 执行我的子例程 ssh 时,一切正常。相反,当我尝试调用我的子例程 boot_up 或 halt 时,会出现错误:
( was unexpected at this time.
但是,如果我向boot_up 或halt 添加第三个参数,那么一切都会再次运行。
所以我的问题是,如何管理具有可变参数长度的批处理文件的调用?
:main
echo Argument 1: (%1)
echo Argument 2: (%2)
echo Argument 3: (%3)
call :set_cygwin_env || exit /b 1
if not "%1"=="" if not %2=="" (
if "%1"=="boot_up" (
call :boot_up %2
) else if "%1"=="halt" (
call :halt %2
) else if "%1"=="ssh" if not %3=="" (
call :ssh %2 %3
) else (
call :show_help || exit /b 1
)
) else (
call :show_help || exit /b 1
)
:exit
【问题讨论】:
-
if not %3==""=>if not "%3"==""。你已经为第一个 arg 做到了... -
我把这两个引号放了,因为当我调用批处理文件时,我在“”之间传递了参数。
-
你真的必须在引号之间传递它们吗?我的意思是没有空格,那有什么意义呢?
-
我不能保证路径或命令没有空格。在 Windows 上,这很常见。
-
if not "%~3"==""是唯一可靠的方法(注意~修饰符)...
标签: windows batch-file command-line cmd command-line-arguments