Windows 批脚本:为什么此条件的计算结果为true?
创建包含以下内容的批处理文件:Windows 批脚本:为什么此条件的计算结果为true?,windows,batch-file,cmd,windows-10,command-prompt,Windows,Batch File,Cmd,Windows 10,Command Prompt,创建包含以下内容的批处理文件: @echo off setlocal echo %1 if [%1] == [] echo hi 然后从命令提示符运行它,如下所示: script.cmd == 它将输出以下内容: ECHO is off. hi @echo off setlocal echo(%~1 if "%~1"=="" echo hi 这是为什么?它是如何发生的?另外,如何更可靠地检查批处理脚本中的空字符串 谢谢。在这种情况下,我建议使用以下方法: ECHO is off. h
@echo off
setlocal
echo %1
if [%1] == [] echo hi
然后从命令提示符运行它,如下所示:
script.cmd ==
它将输出以下内容:
ECHO is off.
hi
@echo off
setlocal
echo(%~1
if "%~1"=="" echo hi
这是为什么?它是如何发生的?另外,如何更可靠地检查批处理脚本中的空字符串
谢谢。在这种情况下,我建议使用以下方法:
ECHO is off.
hi
@echo off
setlocal
echo(%~1
if "%~1"=="" echo hi
使用script.cmd“==”
请注意,我使用了echo(
,如果变量被视为空,它将回显一个换行符,并且我使用了%~1
,它从%1
参数中删除周围的引号
您需要周围的引号,因为除非在引号内,否则与空格一样
@ECHO OFF
SETLOCAL
SET "cmdtail=%*"
ECHO(%cmdtail%
IF "%cmdtail%"=="==" ECHO two "="
但回到未说明的原始问题
请注意,此语法将检测作为命令尾部提供的
=
,而%~1
将不会计算为=
有趣!我不知道echo。
技巧。感谢您提供的简明/信息性答案!关于Dostips和echo有大量讨论。
可能会产生意外结果有一个叫做echo的文件是目录。最好使用echo(
@SomethingDark),我想?我以前没有读过,但读过之后我同意使用echo(
确实更好。是的,就是这样。我总是忘记整个“echo/
,只留下一行空白。”核心问题是,=
符号构成一个标记分隔符,如空格、制表符、、
和;
,因此脚本的行为就像没有给出参数一样;将它放在之间
删除它们的特殊含义并按字面意思保留它们;使用%~1
访问参数将删除引号。。。