标题: [其他] 【已解决】批处理中对特定字符的的转义 [打印本页]
作者: 回家路上 时间: 2015-8-15 12:51 标题: 【已解决】批处理中对特定字符的的转义
本帖最后由 回家路上 于 2015-8-15 22:17 编辑
我要把----(echo;111&echo;222)|call python.py---
写到for循环里,该怎么搞- set "buildcmd=(echo;111^&echo;222)^|call python.py"
- (for /f "delims=" %%a in ('%buildcmd%') do (
- echo;%%a
- )
复制代码
转义转不明白
为什么说此时不应有 |call,其实感觉这个似乎已经不是转义的问题了。
作者: 回家路上 时间: 2015-8-15 12:54
这样其实就已经报错了额,这是怎么了。- set "buildcmd=(echo;111^&echo;222)^|call python.py"
- echo;%buildcmd%
- %buildcmd%
复制代码
错误内容:复制代码
我应该怎么办,我想用for循环对这个命令的执行输出进行解析的。
作者: pcl_test 时间: 2015-8-15 12:59
- 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秒如果不输入批处理就自动走其他逻辑吗?
或者换个思路,可以在定时的时候获取用户按键信息然后做出对应操作吗?- @echo off
- set choice=
- set /p choice=选择(Y/N)
- if "%choice%" neq "Y" (echo;是) else echo;否
- 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的基础上加上自己的效果- 出错了,是否继续(按Y-继续 / 按N-退出)
- 如果不选择,10秒后自动退出... ...10秒(然后动态改变最后的这2/3个字符不换行)9秒.8秒...1秒
复制代码
查找加实验快两个小时了也挑不出来,求教。- @echo off
- echo;出错了,是否继续(按Y-继续 / 按N-退出)
- set /p=如果不选择,10秒后自动退出... ...10秒 <nul
- for /l %%a in (10,-1,0)do (
- set /p=%%a秒<nul
- choice /c yn1 /t 1 /d 1 >nul
- if errorlevel 1 (
- echo;继续
- )else if errorlevel 2 (
- echo;退出
- )else if errorlevel 3 (
- if %%a==0 echo;退出
- )
- )
- pause & exit /b
复制代码
作者: pcl_test 时间: 2015-8-15 19:20
回复 9# 回家路上 - @echo off
- set y=10
- :0
- cls
- echo;出错了,是否继续(按Y-继续 / 按N-退出)
- echo;如果不选择,10秒后自动退出... ...%y%秒
- set /a y-=1
- choice /c yn1 /t 1 /d 1
- if %errorlevel%==1 (
- goto 1
- ) else if %errorlevel%==2 exit
- if %y% gtr 0 goto 0
- exit
- :1
- echo;继续
- 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 语句没有机会执行的。
把数字从大到小排列就对了:- if errorlevel 3 (
- echo;退出
- )else if errorlevel 2 (
- echo;退出
- )else if errorlevel 1 (
- echo;继续
- )
复制代码
作者: pcl_test 时间: 2015-8-15 21:09
回复 11# 回家路上 - @echo off
- setlocal enabledelayedexpansion
- echo;出错了,是否继续(按Y-继续 / 按N-退出)
- set /p=如果不选择,10秒后自动退出... ...<nul
- for /l %%a in (110,-1,100) do (
- set n=%%a
- set /p=!n:~1!<nul
- set /p=<nul
- choice /c yn1 /n /t 1 /d 1 >nul
- if !errorlevel!==1 (
- echo;&goto 1
- ) else if !errorlevel!==2 exit
- )
- exit
- :1
- echo;继续
- pause
复制代码
作者: 回家路上 时间: 2015-8-15 22:11
回复 13# pcl_test
回复 12# WHY
感谢pcl_test的帮助和WHY的指点
也把我的实验的能用的脚本贴出来,万一谁参考啥的呢。O(∩_∩)O!- @echo off
- call :iscontinue 20
- pause >nul& exit /b
-
- :iscontinue
- set n=%~1
- echo;出错了,是否继续(按Y-继续 / 按N-退出)
- set /p=如果不选择,%n%秒后自动退出... ...%n%秒<nul
- setlocal enabledelayedexpansion
- for /l %%a in (%n%,-1,0)do (
- set m=%%a210
- if "!m:~2,1!"=="1" set /p=%%a秒<nul
- if "!m:~2,1!"=="2" set /p=%%a秒<nul
- choice /c yn1 /t 1 /d 1 >nul
- if !errorlevel!==1 (
- echo;&echo;继续&endlocal&goto :eof
- )else if !errorlevel!==2 (
- echo;&echo;退出 &endlocal&goto :eof
- )
- if "%%a"=="10" set /p= <nul
- )
- echo;&echo;退出
- endlocal&goto :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |