我有以下程序(简化)。
事实是table
变量可以包含无,一个或多个字符串值:
set table=
REM set table=geo1
REM set table=geo1,geo2,geo3
if [%table%]==[] (goto :end)
for %%a in %table% do (
REM Some commands...
)
:end
REM Some commands...
如果table=
或table=geo1
,则没问题。该计划表现得很好。
如果table=geo1,geo2,geo3
(多个值),即使最后使用pause
命令,程序也会立即关闭。
是否有一种简单的方法可以检查变量是否为空,是一个数组还是一个字符串?
答案 0 :(得分:4)
您的问题是,逗号(如 space )是默认分隔符,因此cmd
解释
if [%table%]==[] (goto :end)
as(eg)
if [geo1 geo2 geo3]==[] (goto :end)
因此它看到geo2
期望比较运算符,生成错误消息并终止批处理。如果您直接从提示符运行,则会看到该消息。
确定变量是否为set
的方法是
if defined variablename .....
或
if not "%variablename%"=="" .....
其中"quoting a string containing separators"
解决了包含空格的问题,这与文件/目录名一样。
答案 1 :(得分:2)
您在两点处得到语法错误,其中逗号不是您想要的。
第一个问题是if
命令。还有一个更好的语法(见下文)
第二个问题是for
命令。还有一个更好的语法(见下文)
另一个可能的问题是set
命令;有更安全的(和推荐的语法(见下文)
rem set table=
REM set table=geo1
set "table=geo1,geo2,geo3"
if "%table%"=="" (goto :end)
for %%a in (%table%) do (
echo Some commands with %%a...
)
:end