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
Batch file 我无法看到最后一条ECHO语句有什么原因吗?_Batch File_Cmd - Fatal编程技术网

Batch file 我无法看到最后一条ECHO语句有什么原因吗?

Batch file 我无法看到最后一条ECHO语句有什么原因吗?,batch-file,cmd,Batch File,Cmd,请参阅所附代码。。出于某种原因,我无法理解为什么最后两条语句没有出现。我希望在这个问题上得到一些指导 @ECHO off SET user=%1% SET password=%2% SET server=%3% ECHO Running MaintenanceToolsAPI.StartProcess FOR /F "tokens=1-8" %%a IN ('maintenance_tools -user %user% -password %password% -server %server%

请参阅所附代码。。出于某种原因,我无法理解为什么最后两条语句没有出现。我希望在这个问题上得到一些指导

@ECHO off
SET user=%1%
SET password=%2%
SET server=%3%
ECHO Running MaintenanceToolsAPI.StartProcess
FOR /F "tokens=1-8" %%a IN ('maintenance_tools -user %user% -password %password% -server %server% -startprocess DataWarehouseSync') DO (
    IF "%%a %%b %%c %%d %%e %%f %%g"=="Process 'DataWarehouseSync' is being run with PID" (
        SET PID=%%h
    ) ELSE (
        EXIT /B 1
    )
)
ECHO The PID is %PID%
ECHO We have reached the end
仅供参考,for中命令的预期结果为:

Running maintenance_tools.gsp
Connecting as [user] to URL [server]
Running process 'DataWarehouseSync'
Process 'DataWarehouseSync' is being run with PID 16727
done
给定(您的代码):

当处理行
运行维护工具.gsp

%%a将成为运行中的

%%b将成为维护工具。gsp %%c、 .%g将为空,因此

“%%a%%b%%c%%d%%e%%f%%g”==“正在使用PID运行进程“DataWarehouseSync”
false
,因此采用
else
路径,进程完成

解决方案-强制
PID
为空,然后如果任何一行与所需字符串匹配,
PID
将成为某种东西,因此当
完成时,将定义
PID
<代码>退出b 1
如果不是,则报告并继续


还要注意,参数引用(%0..%9)应该用作(例如)
set var=%3
,或者最好是
set“var=%3”
,而不是您所表达的
%3%

可能是因为
exit/b1
语句。您可以在退出前再设置一个回显,以查看if是否到达那里。对于没有提供预期的输出表示歉意,但它应该通过if条件,而不是进入ELSE。在
if`行之前执行一个
echo“%%a%%b%%c%%d%%e%%f%%g”。是您期望的输出吗?命令行参数被引用为
%1
%2
等。
%1%
工作,因为解析器看到
%1
,然后看到附加的
%
,即“变量的开始”。由于没有找到“关闭”
%
,解析器将忽略附加的
%
。但是
%1%
是一个错误的语法(尽管解析器“原谅了”)
....
SET server=%3

SET "PID="

ECHO Running MaintenanceToolsAPI.StartProcess
FOR /F "tokens=1-8" %%a IN ('maintenance_tools -user %user% -password %password% -server %server% -startprocess DataWarehouseSync') DO (
    IF "%%a %%b %%c %%d %%e %%f %%g"=="Process 'DataWarehouseSync' is being run with PID" (
        SET PID=%%h
    )
)

IF NOT DEFINED PID EXIT /B 1

ECHO The PID is %PID%
...