Board logo

标题: [其他] 【已解决】批处理中对特定字符的的转义 [打印本页]

作者: 回家路上    时间: 2015-8-15 12:51     标题: 【已解决】批处理中对特定字符的的转义

本帖最后由 回家路上 于 2015-8-15 22:17 编辑

我要把----(echo;111&echo;222)|call python.py---
写到for循环里,该怎么搞
  1. set "buildcmd=(echo;111^&echo;222)^|call python.py"
  2. (for /f "delims=" %%a in ('%buildcmd%') do (
  3. echo;%%a
  4. )
复制代码
转义转不明白

为什么说此时不应有 |call,其实感觉这个似乎已经不是转义的问题了。
作者: 回家路上    时间: 2015-8-15 12:54

这样其实就已经报错了额,这是怎么了。
  1. set "buildcmd=(echo;111^&echo;222)^|call python.py"
  2. echo;%buildcmd%
  3. %buildcmd%
复制代码
错误内容:
  1. 此时不应该有 |call
复制代码
我应该怎么办,我想用for循环对这个命令的执行输出进行解析的。
作者: pcl_test    时间: 2015-8-15 12:59

  1. set "buildcmd=(echo;111^&echo;222^)^|call python.py"
复制代码

作者: 回家路上    时间: 2015-8-15 13:10

回复 3# pcl_test


嗯,谢啦,这个有什么道理?或者有木有帖子参考理解啥的。O(∩_∩)O!
作者: pcl_test    时间: 2015-8-15 13:41

本帖最后由 pcl_test 于 2015-8-15 13:52 编辑

回复 4# 回家路上

括号在批处理中一般作为语句块的限定,其中的语法只是括号对称问题,使得语句是否合法闭合
作者: 回家路上    时间: 2015-8-15 13:52

哦,也算半个特殊字符了都。
我再问个问题(呵呵,Face Red)
批处理的set /p 可以等待用户输入,那我可以在等待10秒如果不输入批处理就自动走其他逻辑吗?
或者换个思路,可以在定时的时候获取用户按键信息然后做出对应操作吗?
  1. @echo off
  2. set choice=
  3. set /p choice=选择(Y/N)
  4. if "%choice%" neq "Y" (echo;是) else echo;否
  5. pause & exit /b
复制代码
怎么给10秒钟时间来选择。或者类似功能。
作者: pcl_test    时间: 2015-8-15 13:58

你需要的是choice命令,XP不自带
作者: 回家路上    时间: 2015-8-15 14:27

回复 7# pcl_test


哦,看到了。我的是win10,自带。哈,再次感谢。
作者: 回家路上    时间: 2015-8-15 16:50

回复 8# 回家路上


我想在choice的基础上加上自己的效果
  1. 出错了,是否继续(按Y-继续 / 按N-退出)
  2. 如果不选择,10秒后自动退出... ...10秒(然后动态改变最后的这2/3个字符不换行)9秒.8秒...1秒
复制代码
查找加实验快两个小时了也挑不出来,求教。
  1. @echo off
  2. echo;出错了,是否继续(按Y-继续 / 按N-退出)
  3. set /p=如果不选择,10秒后自动退出... ...10秒 <nul
  4. for /l %%a in (10,-1,0)do (
  5. set /p=%%a秒<nul
  6. choice /c yn1 /t 1 /d 1 >nul
  7. if errorlevel 1 (
  8. echo;继续
  9. )else if errorlevel 2 (
  10. echo;退出
  11. )else if errorlevel 3 (
  12. if %%a==0 echo;退出
  13. )
  14. )
  15. pause & exit /b
复制代码

作者: pcl_test    时间: 2015-8-15 19:20

回复 9# 回家路上
  1. @echo off
  2. set y=10
  3. :0
  4. cls
  5. echo;出错了,是否继续(按Y-继续 / 按N-退出)
  6. echo;如果不选择,10秒后自动退出... ...%y%秒
  7. set /a y-=1
  8. choice /c yn1 /t 1 /d 1
  9. if %errorlevel%==1 (
  10.     goto 1
  11. ) else if %errorlevel%==2 exit
  12. if %y% gtr 0 goto 0
  13. exit
  14. :1
  15. echo;继续
  16. pause
复制代码

作者: 回家路上    时间: 2015-8-15 20:32

回复 10# pcl_test


我想的是不清屏的显示,就是用退格键的。因为这只是我脚本的一部分,一个出现错误了,选择一下是否继续的。清屏总归不完美。我一直试的也是不清屏。
作者: WHY    时间: 2015-8-15 20:55

if /?
IF [NOT] ERRORLEVEL number command

  ERRORLEVEL number 如果最后运行的程序返回一个等于或大于                    指定数字的退出代码,指定条件为 true。


if errorlevel 1 意思是返回码大于等于1,这个条件始终成立,后面的 else 语句没有机会执行的。
把数字从大到小排列就对了:
  1.                 if errorlevel 3 (
  2. echo;退出
  3. )else if errorlevel 2 (
  4. echo;退出
  5. )else if errorlevel 1 (
  6.                                 echo;继续
  7.           )
复制代码

作者: pcl_test    时间: 2015-8-15 21:09

回复 11# 回家路上
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo;出错了,是否继续(按Y-继续 / 按N-退出)
  4. set /p=如果不选择,10秒后自动退出... ...<nul
  5. for /l %%a in (110,-1,100) do (
  6.     set n=%%a
  7.     set /p=!n:~1!<nul
  8.     set /p=<nul
  9.     choice /c yn1 /n /t 1 /d 1 >nul
  10.     if !errorlevel!==1 (
  11.         echo;&goto 1
  12.     ) else if !errorlevel!==2 exit
  13. )
  14. exit
  15. :1
  16. echo;继续
  17. pause
复制代码

作者: 回家路上    时间: 2015-8-15 22:11

回复 13# pcl_test
回复 12# WHY

感谢pcl_test的帮助和WHY的指点
也把我的实验的能用的脚本贴出来,万一谁参考啥的呢。O(∩_∩)O!
  1. @echo off
  2. call :iscontinue 20
  3. pause >nul& exit /b
  4. :iscontinue
  5. set n=%~1
  6. echo;出错了,是否继续(按Y-继续 / 按N-退出)
  7. set /p=如果不选择,%n%秒后自动退出... ...%n%秒<nul
  8. setlocal enabledelayedexpansion
  9. for /l %%a in (%n%,-1,0)do (
  10. set m=%%a210
  11. if "!m:~2,1!"=="1" set /p=%%a秒<nul
  12. if "!m:~2,1!"=="2" set /p=%%a秒<nul
  13. choice /c yn1 /t 1 /d 1 >nul
  14. if !errorlevel!==1 (
  15. echo;&echo;继续&endlocal&goto :eof
  16. )else if !errorlevel!==2 (
  17. echo;&echo;退出 &endlocal&goto :eof
  18. )
  19. if "%%a"=="10" set /p= <nul
  20. )
  21. echo;&echo;退出
  22. endlocal&goto :eof
复制代码





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