我正在为家庭作业写一个简单的批处理文件,它应该检查是否定义了两个变量。我让它工作正常,然后我意识到需要检查两个变量,而不是一个。它仍然有效,但它会出现语法错误。有谁知道为什么?
Collecting Twisted==17.5.0 (from -r /srv/wcsftp/master/wcsftp/requirements.txt (line 1))
Using cached Twisted-17.5.0.tar.bz2
Complete output from command python setup.py egg_info:
Download error on https://pypi.python.org/simple/incremental/: [Errno 101] Network is unreachable -- Some packages may not be found!
Couldn't find index page for 'incremental' (maybe misspelled?)
Download error on https://pypi.python.org/simple/: [Errno 101] Network is unreachable -- Some packages may not be found!
No local packages or download links found for incremental>=16.10.1
答案 0 :(得分:1)
尝试这样。当没有命令行参数时会发生错误,并且首先将if解释为if == ""
- 这是错误的语法:
:: 04/09/18
:: checkVars.bat
:: Checks if a variable name is defined
@echo off
setlocal enableDelayedExpansion
if "%~1" == "" (
echo Usage: %0 varname1 [varname2 [..]]
exit /b
) else (
goto check
)
:check
set "arg=%~1"
if not "%~1" equ "" (
if defined !arg! (
echo "'%~1' is defined"
) else (
echo "'%~1' is not defined"
)
) else (
goto :endcheck
)
shift /1
goto check
:endcheck
你也会遇到与if defined
相同的问题。要使其更加强大,你可以使用延迟扩展,而且你需要一种方法来退出检查,否则你将会点击一个永无止境的循环。使用goto
进行操作将会影响脚本的性能。
答案 1 :(得分:1)
或者您可以使用For
循环:
Rem 04/09/18
Rem checkVars.bat
Rem Checks if variable names are defined
@Echo Off
If "%~1"=="" (Echo Usage: "%~0" "varname1" "varname2" etc. & Exit /B)
For %%A In (%*) Do If Defined %%~A (Echo "%%~A is defined"
) Else Echo "%%A is not defined"
Pause
如果它们包含空格,你可能只需用varname1
,varname2
等用双引号括起来(但这总是很好的做法)。
答案 2 :(得分:0)
假设您只提供一个参数var1
。
代码将检查“%1”,它将是var1
,然后执行shift
,用% n + 1 <替换每个% n / em> - 只有一个参数,%2
为空,所以现在%1
为空,因此您的代码将返回:check
但尝试执行if defined (
(从%1
现在为空) - 这是语法错误。
修复现有代码的简便方法是
:: 04/09/18
:: checkVars.bat
:: Checks if a variable name is defined
if "%1" == "" (
echo "Usage: %0 varname1"
exit /b
) else (
goto check
)
:check
if defined %1 (
echo "%1 is defined"
) else (
echo "%1 is not defined"
)
shift /1
if "%1" == "" (
echo "Finished"
exit /b
)
goto check
这样只有在check
存在
%1
注意:在此行的两个个案例中,请使用
if "%1" == "" (
不
if %1 == "" (
因为==
运算符非常直观。 两个侧的字符串必须相同才能达到等效性。