变量未存储正确的字符串

时间:2019-01-23 13:47:23

标签: batch-file

我已经创建了此批处理脚本来删除中断。

C:\oem\agent_inst\bin\emctl status blackout > c:\temp\bo_status.txt | for /F "tokens=2 delims==" %%a in ('findstr Blackoutname c:\temp\bo_status.txt') do SET bo=%%a
C:\oem\agent_inst\bin\emctl stop blackout %bo%
del c:\temp\bo_status.txt

我的c:\temp\bo_status.txt文件内容如下:

  

中断名称= abc_12__美国目标=(america.host.com,)时间=   ({2019-01-23 | 12:27:47 | 720 Min,|})已过期= False

但是当我运行批处理脚本时,它不使用此中断名称(abc_12__america),而是在abc_1__america变量中继续使用%bo%名称。我不确定该名称如何卡在缓冲区中。

下面是我运行批处理脚本时的输出

c:\>bo_stop.bat

c:\>C:\oem\agent_inst\bin\emctl status blackout   1>c:\temp\bo_status.txt  | for /F "tokens=2 delims==" %a in ('findstr Blackoutname c:\temp\bo_status.txt') do SET bo=%a

c:\>C:\oem\agent_inst\bin\emctl stop blackout  abc_1__america
Blackout stop Error : Blackout "abc_1__america" does not exist

请帮助我。

1 个答案:

答案 0 :(得分:0)

在这里管道没有任何意义。在管道的右侧,尚未创建文件,导致“找不到任何内容”,因此变量bo仅保留其先前的内容。不要使用管道:

call "C:\oem\agent_inst\bin\emctl" status blackout > c:\temp\bo_status.txt
for /F "tokens=2 delims==" %%a in ('findstr Blackoutname c:\temp\bo_status.txt') do SET bo=%%a
call "C:\oem\agent_inst\bin\emctl" stop blackout %bo%
del c:\temp\bo_status.txt

您的脚本拒绝继续的原因是emctl是一个批处理文件。仅使用它的名称执行它意味着将控制权转移给它(它永远不会将控制权返回给您的原始脚本)。为了能够返回,您需要call。 (上面的代码经过修改以反映这一点,以帮助将来的读者)