Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批脚本:为什么此条件的计算结果为true?_Windows_Batch File_Cmd_Windows 10_Command Prompt - Fatal编程技术网

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
访问参数将删除引号。。。