Board logo

标题: [文本处理] 批处理for命令中的管道符号无法识别? [打印本页]

作者: kfc427    时间: 2009-5-13 10:37     标题: 批处理for命令中的管道符号无法识别?

首先需要声明一下,小弟是最近两天开始弄批处理的。所以说绝对是个菜鸟,所以希望各位江湖豪杰能口下留情。谢谢啊!
先来看看我写的batch file
  1. @echo on
  2. REM discriminate query version or build No. by the first parameter
  3. if "%1" EQU "" goto :endofargs
  4. if /i "%1" EQU "-version" goto :versionQuery
  5. if /i "%1" EQU "-buildNo" goto :buildnoQuery
  6. REM *** version query section ***
  7. :versionQuery
  8. for /f "tokens=6 delims= " %%i in ('%OMNIHOME%\probes\win32\%2 -version|find /I "probe"|find /V "API"') do echo %%~i
  9. REM *** build number query section ***
  10. :buildnoQuery
  11. for /f "tokens=3 delims= " %%i in ('%OMNIHOME%\probes\win32\%2 -version | find "Release ID:"') do echo %%~i
  12. :endofargs
  13. echo "Bad parameter, please input parameters correctly..."
  14. echo "1. ProbeInfo.bat -version PROBE_NAME"
  15. echo "2. ProbeInfo.bat -buildNo PROBE_NAME"
复制代码

在命令行执行 batchfile.bat -version abc.exe之后,其中有一个这样的提示信息
| was unexpected at this time.
管道符号此时不是所期望的?? 这是什么意思?不识别管道符 ??
不明白。希望高手们能根据我的代码帮小弟分析一下问题。跪谢!!

[ 本帖最后由 kfc427 于 2009-5-13 15:32 编辑 ]
作者: Batcher    时间: 2009-5-13 10:40

for语句中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306

本版规则
1、求代码、寻求代码解释、探讨代码得失的帖子均可发在本版块,其余话题禁止在本版讨论;
2、求助时,务必在顶楼一次性把问题交代清楚;若文字难以表述,请配图说明,或是上传附件;但是,一切操作应从节约论坛资源的角度出发,能文字说明清楚的就无需再发图片,小图能说明问题的尽量不截全图,在不影响效果的前提下尽量压缩图片及附件;
3、所发代码若不止一行,请务必用code标记把代码部分首尾括起来,以便他人复制;


Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html
作者: kfc427    时间: 2009-5-13 10:44

谢谢高人!!
原来如此啊!
作者: kfc427    时间: 2009-5-13 10:48

'C:\Program' is not recognized as an internal or external command,operable program or batch file.

现在又有这个提示信息,%OMNIHOME%其中包含“C:\Program Files\test\...”
肯定是把路径里的空格当做命令行里的分隔符了
这个问题如何解决?
作者: SunTB    时间: 2009-5-13 10:58

原帖由 kfc427 于 2009-5-13 10:48 发表
'C:\Program' is not recognized as an internal or external command,operable program or batch file.

现在又有这个提示信息,%OMNIHOME%其中包含“C:\Program Files\test\...”
肯定是把路径里的空格当做命令 ...


"%OMNIHOME%"
作者: kfc427    时间: 2009-5-13 11:04

原帖由 SunTB 于 2009-5-13 10:58 发表


"%OMNIHOME%"

for /f "tokens=6 delims= " %%i in ('"%OMNIHOME%"\probes\win32\%2 -version ^|find /I "probe" ^| find /V "API"') do echo %%~i
都已经改成这样了,可是为什么还是
'C:\Program' is not recognized as an internal or external command,operable program or batch file.
这个提示呢?
不解
作者: SunTB    时间: 2009-5-13 11:05

"%OMNIHOME%\probes\win32\%2"

当路径中含空格时 在整个路径的前后各加上一个半角的双引号

[ 本帖最后由 SunTB 于 2009-5-13 11:09 编辑 ]
作者: 随风    时间: 2009-5-13 12:54

Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html

楼主什么回帖都看得见,为何独独看不见2楼回帖中的这一句呢?难道真是事不关己?
作者: kfc427    时间: 2009-5-13 15:43

原帖由 随风 于 2009-5-13 12:54 发表

楼主什么回帖都看得见,为何独独看不见2楼回帖中的这一句呢?难道真是事不关己?

不好意思,我光顾着着急解决问题了。忽略这个问题了
现在我已经加上了
呵呵
作者: kfc427    时间: 2009-5-13 15:47

for /F "usebackq tokens=6" %%i IN (`"%OMNIHOME%\probes\win32\%2 -version" ^|find /I "probe" ^| find /V "API"`) DO echo %%i
都改成这样了,可是为什么还是
'C:\Program' is not recognized as an internal or external command,operable program or batch file.
这个提示呢?
愁死我了
作者: Batcher    时间: 2009-5-13 16:02     标题: 回复 10楼 的帖子

这样呢?
  1. for /f "tokens=6" %%i in ('"%OMNIHOME%\probes\win32\%2" -version^|find /i "probe"^|find /v "API"') do echo %%i
复制代码

作者: kfc427    时间: 2009-5-13 16:12

  1. @echo on
  2. REM discriminate query version or build No. by the first parameter
  3. if "%1" EQU "" goto :endofargs
  4. if /i "%1" EQU "-version" goto :versionQuery
  5. if /i "%1" EQU "-buildNo" goto :buildnoQuery
  6. REM *** version query section ***
  7. :versionQuery
  8. for /F "tokens=6" %%i IN ('"%OMNIHOME%\probes\win32\%2" -version ^|find /I "probe" ^| find /V "API"') DO echo %%i
  9. REM *** build number query section ***
  10. :buildnoQuery
  11. for /F "usebackq tokens=3" %%i IN (`"%OMNIHOME%\probes\win32\%2 -version" ^| find "Release ID:"`) DO echo %%i
  12. :endofargs
  13. echo "Bad parameter, please input parameters correctly..."
  14. echo "1. ProbeInfo.bat -version PROBE_NAME"
  15. echo "2. ProbeInfo.bat -buildNo PROBE_NAME"
复制代码
改成这样以后运行,结果还是
'C:\Program' is not recognized as an internal or external command,operable program or batch file.
作者: Batcher    时间: 2009-5-13 16:45     标题: 回复 12楼 的帖子

看看执行过程,想想哪里出错了。
  1. if "%1" EQU "" (
  2.   goto :endofargs
  3. ) else if /i "%1" EQU "-version" (
  4.   goto :versionQuery
  5. ) else if /i "%1" EQU "-buildNo" (
  6.   goto :buildnoQuery
  7. ) else (
  8.   goto :endofargs
  9. )
  10. pause
  11. goto :eof
  12. :versionQuery
  13. for /f "tokens=6" %%i in ('"%OMNIHOME%\probes\win32\%2" -version^|find /i "probe"^|find /v "API"') do (
  14.   echo/%%i
  15. )
  16. pause
  17. goto :eof
  18. :buildnoQuery
  19. for /f "tokens=3" %%i in ('"%OMNIHOME%\probes\win32\%2" -version"^|find "Release ID:"') do (
  20.   echo/%%i
  21. )
  22. pause
  23. goto :eof
  24. :endofargs
  25. echo "Bad parameter, please input parameters correctly..."
  26. echo "1. ProbeInfo.bat -version PROBE_NAME"
  27. echo "2. ProbeInfo.bat -buildNo PROBE_NAME"
  28. pause
复制代码





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