Board logo

标题: [系统相关] [已解决]批处理在 in ('xxx') 输入命令的时候 命令包含""怎么办? [打印本页]

作者: missll    时间: 2012-8-7 11:33     标题: [已解决]批处理在 in ('xxx') 输入命令的时候 命令包含""怎么办?

目的 :
我想获取一个服务的状态 如果命令是停止状态 则 SC START SRV, 如果服务是启动状态 则 SC STOP SRV
  1. C:\>sc query pcapsvc
  2. SERVICE_NAME: pcapsvc
  3.         TYPE               : 10  WIN32_OWN_PROCESS
  4.         STATE              : 1  STOPPED
  5.                                 (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN))
  6.         WIN32_EXIT_CODE    : 0  (0x0)
  7.         SERVICE_EXIT_CODE  : 0  (0x0)
  8.         CHECKPOINT         : 0x0
  9.         WAIT_HINT          : 0x0
复制代码
  1. C:\>sc query pcapsvc |find /i "STATE"
  2.         STATE              : 1  STOPPED
复制代码
目前我这样写:
  1. for /f "tokens=3 " %%a in ('sc query pcapsvc|find /i "STATE"') do (
  2. if %%a ==1 sc start pcapsvc
  3. if %%a ==4 sc stop pcapsvc)
复制代码
因为命令格式不对 "STATE"' 所以直接就报错了,于是我只能先把服务的状态写到文件
  1. @echo off
  2. sc query pcapsvc|find /i "STATE" >%temp%\pcapsvc.tmp
  3. for /f "tokens=3 " %%a in ('type %temp%\pcapsvc.tmp') do (
  4. if %%a ==1 sc start pcapsvc>nul
  5. if %%a ==4 sc stop pcapsvc>nul)
复制代码
这样就实现目的了,但是没有从根本上解决在 in ('命令') 中如果碰到需要加"的时候怎么解决呢?
作者: cutebe    时间: 2012-8-7 12:40

加^
'sc query pcapsvc^|find /i "STATE"'


外加一层引号
'"sc query pcapsvc|find /i "STATE""'
作者: missll    时间: 2012-8-7 13:02

回复 2# cutebe


    谢谢 谢谢  谢谢 ,按你所说再外加一层括号就可以了 。

in ('"sc query pcapsvc|find /i "STATE""')
作者: qzwqzw    时间: 2012-8-7 14:27

尽量不要使用双层双引号
如果STATE这个词带上空格或其它特殊字符
则会出现不可预知的错误
作者: missll    时间: 2012-8-7 16:08

回复 4# qzwqzw


    多谢指点~~




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2