batch-file - 检查批处理文件中的空字符串
问题描述
我正在学习批处理脚本,并复制了如何检查空的示例:
@echo off
SET a=
SET b=Hello
if [%a%]==[] echo "String A is empty"
if [%b%]==[] echo "String B is empty "
但我收到这样的错误:
D:\Projects\Temp\BatchLearning>Script.bat
]==[] was unexpected at this time.
什么问题?为什么这是在指南中。过去有用吗?示例来自这里。
升级版:
我在第 2 行、第 3 行和第 5 行(最后)行的末尾删除了一些空格,现在一切正常,这是怎么回事?
解决方案
环境变量不能有空字符串。在没有为环境变量分配任何内容时,根本没有定义环境变量。
在命令提示符窗口中运行的命令IF输出的帮助解释了语法:
if defined Variable ...
if not defined Variable ...
只要在启动cmd.exe
或运行批处理文件时默认启用命令扩展名,这就会起作用。
@echo off
SET "a="
SET "b=Hello"
if not defined a echo String A is empty.
if not defined b echo String B is empty.
方括号对命令IF或 Windows 命令处理器没有意义。但是双引号有一个,因为它们定义了一个参数字符串。所以也有可能使用:
@echo off
SET "a="
SET "b=Hello"
if "%a%" == "" echo String A is empty.
if "%b%" == "" echo String B is empty.
但请注意,在执行解析后的命令行之前,字符串值中的双引号字符或命令处理器扩展的"
双a
引号字符会导致命令行的语法错误。b
%a%
%b%
另请阅读关于在命令行上使用 'set var = text' 后为什么没有带有 'echo %var%' 的字符串输出?为什么建议使用语法set "Variable=Value"
来避免将不显示尾随空格的值分配给环境变量。
推荐阅读
- javascript - 如何根据文本区域中的字符数查找成本
- excel - vba - 根据定义的值更改单元格的颜色
- dialogflow-es - 如何在对话框流中创建带有日期的自定义实体
- symfony - symfony 4 json_login JWT 401 凭证错误
- python - SQLAlchemy Bakery -Function 需要一定的数组大小
- c++ - 在 C++ 中运行时更改操作
- java - 我可以将列表作为参数传递给 Scala/Java 中以这种方式定义的方法 detectFormatAutomatically(delimitersForDetection:Char*)
- python - 尝试在 Python 中构建一个简单的计算器无法在数学符号之间进行迭代
- google-cloud-firestore - Firestore 安全规则 - 通配符集合名称?
- javascript - 如何在下拉列表中获取除隐藏和提交按钮之外的所有表单字段