我已经创建了此批处理脚本来删除中断。
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
请帮助我。
答案 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
。 (上面的代码经过修改以反映这一点,以帮助将来的读者)