[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理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 编辑 ]

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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢高人!!
原来如此啊!

TOP

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

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

TOP

原帖由 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%"

TOP

原帖由 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.
这个提示呢?
不解

TOP

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

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

[ 本帖最后由 SunTB 于 2009-5-13 11:09 编辑 ]

TOP

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

楼主什么回帖都看得见,为何独独看不见2楼回帖中的这一句呢?难道真是事不关己?
技术问题请到论坛发帖求助!

TOP

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

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

不好意思,我光顾着着急解决问题了。忽略这个问题了
现在我已经加上了
呵呵

TOP

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.
这个提示呢?
愁死我了

TOP

回复 10楼 的帖子

这样呢?
  1. for /f "tokens=6" %%i in ('"%OMNIHOME%\probes\win32\%2" -version^|find /i "probe"^|find /v "API"') do echo %%i
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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.

TOP

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表