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


其实如果是纯数字的话,用 set /a 来判断更绿色无污染,不过会自动将用户输入的八进制、十六进制数转为十进制。非必要情况尽量避免使用外部命令,对代码效率和容错性的提升是有可观效果的。
  1. set /a "test/=!!(var/4)+!(var/1)" 2>nul&&echo 错误||echo 正确
复制代码
或者用 for 亦可:
  1. setlocal enabledelayedexpansion
  2. for /f "delims=123" %%a in ("!var!") do set error=1
  3. if defined error (echo 错误) else echo 正确
复制代码
如果输入的不是单个字符,那也有简化的办法,不过不兼容含双引号和感叹号的 %var%
  1. set str="123"abc"QWE"@#$"
  2. setlocal enabledelayedexpansion
  3. if "!str:"%var:"=%"=!"=="!str!" set error=0
复制代码
当然也可以用笨办法...
  1. setlocal enabledelayedexpansion
  2. for %%a in (123 abc QWE @#$) do if %%a==!var! echo 正确&set error=1
  3. if not defined error echo 错误
复制代码

TOP

回复 3# lyc309


    这个不用试,不要说逻辑上如何,括号都没配套成对,当然不对
说可以不用for 是因为每项总是单列出来的,谁都会如 if "%var%"=="1" set url=新浪
一般接收键盘输入最好防输错,可以类似如下判断(至于大于多少之类的,看set/? 退出命令可用goto ...也可用exit):
  1. :import
  2. echo 你要处理的博客地址:
  3. echo 1. 新浪 2. 163  3. soho
  4. set /p var=请输入一数字:
  5. echo %var%|findstr/x "[1-3]">nul||(
  6.   echo 选择有误
  7.   goto :import)
复制代码
1

评分人数

TOP

需要加强各命令基本语法练习
1 批处理一般情况都是顺序执行的,对if... 处理形式为goto ... 的,可以不用el ...
yyykkkyyyy 发表于 2011-12-10 12:37



    谢谢,正在学基础呢!
但是用这个时候
  1. if "%var%"=="1" (goto work) else (
  2. if "%var%"=="2" (goto work) else (
  3.   if "%var%"=="3" (goto work) else (
  4.    if "%var%"=="4" (goto work) else (
  5.     if "%var%"=="5" (goto work) else (
  6.      if "%var%"=="6" (goto work) else goto fail
  7.     )
  8. )
复制代码
输入数字的时候直接退出,不知道怎么回事?你可以测试下。dos有没有直接判断大于几的退出简单写法
本来按代码用途没必要用for,不过标题的说的功能是可以实现的

可以请问下可以用什么呢?

TOP

本帖最后由 yyykkkyyyy 于 2011-12-10 12:39 编辑

需要加强各命令基本语法练习
1 批处理一般情况都是顺序执行的,对if... 处理形式为goto ... 的,可以不用else... 因为跳开后不会顺序执行了,正如你上面那6行代码的那样是没有什么问题的(那个gep是错的)虽然代码用别的命令还可简化。
2 本来按代码用途没必要用for,不过标题的说的功能是可以实现的
  1. for /f "tokens=1-6 delims=," %%1 in ("新浪,163,soho") do set Url=%%%var%
  2. if defined url echo 选择的是 %url%
复制代码

TOP

返回列表