Board logo

标题: 批处理IF命令的两个小练习 [打印本页]

作者: 523066680    时间: 2009-7-27 22:01     标题: 批处理IF命令的两个小练习

下面的题目不难,方法有多种~ 看能不能一次性写出较精简的哦~


习题1.1   判断一个字符串里面是否含有 s 这个字符
       1.2   同时判断两个数字变量a 和 b  是否 a=1 且 b=2

写出判断的句子即可。

[ 本帖最后由 523066680 于 2009-7-27 22:03 编辑 ]
作者: 523066680    时间: 2009-7-28 20:42

我觉得这两道题目虽然做起来不难,但是很容易绕弯路~

没想到挂两天了没人做……

补个积分吧,中层下的会员,一次性做最简的代码或超乎意料地,给10分
作者: yslyxqysl    时间: 2009-7-28 22:20

s分大小写没有
不分可以用变量替换的方法做
第二题...难度较低
作者: 523066680    时间: 2009-7-29 16:57

细节不顾虑,就看你的方式。.

不管多简单,写下来吧. 除非你觉得鄙视简单的东西.

[ 本帖最后由 523066680 于 2009-7-29 17:00 编辑 ]
作者: 莫言伤冬    时间: 2009-7-29 17:14

怎么没有例子呀!呵呵一会再来看
作者: 莫言伤冬    时间: 2009-7-29 17:15

怎么没有例子呀!呵呵一会再来看
作者: keen    时间: 2009-7-29 19:38

1.1
  1. @echo off
  2. set /p str=请输入字符串:
  3. set "str=%str:"=%"
  4. if "%str:s= s %" equ "%str%" (echo 不存在s) else (echo 存在s)
  5. pause
复制代码
1.2
  1. @echo off
  2. set /p a=请输入a的值:
  3. set /p b=请输入b的值:
  4. set a=%a:"=%&set b=%b:"=%
  5. if "%a%" equ "1" (if "%b%" equ "2" (echo yes) else (echo no)) else echo no
  6. pause
复制代码

作者: 523066680    时间: 2009-7-29 21:16

首先,非常感谢keen的参与

其次,大部分人都懒得理这题目嘛。我是觉得题目的解仔细想会更简洁,
所以才拿出来,没想到这么少人愿意做。也罢,我直接贴个人结果了

没有判断大小写,也没有算入特殊情况。
  1. @echo off &title 包含s?
  2. set /p inp="输入字符串:"
  3. if "%inp:s=%"=="%inp%" (echo,不含有s) else (echo,含有s)
  4. pause
复制代码
  1. @echo off &title (a=1)且(b=2)?
  2. set /p a=请输入a的值:
  3. set /p b=请输入b的值:
  4. if "%a%_%b%"=="1_2" (echo yes) else (echo no)
  5. pause
复制代码

[ 本帖最后由 523066680 于 2009-7-29 21:22 编辑 ]
作者: lsp19880301    时间: 2009-7-30 07:14

看了楼上的两位大侠。。我终于明白了第一题原来是那么简单。。当初我所设想的是这样子 .  输入几个字符。 测试字符长度。 再应用FOR循环提取每一个字符 再用if  判断是否相等。。本来以为很简单的。。哎。没想到我最后还是没做出来。。不知楼主可否按我的思路写个批处理给参考一下。。 感谢~
作者: 523066680    时间: 2009-7-30 07:44

确实是简单的,只是思想转个弯就会更简单,所以我从不忽视简单的东西。

9楼的,逐个提取总是最频繁的操作。如果走弯的思路,我觉得还可以用
for 以 s 为分隔符~  然后累加数字判断。 还可以判断出s字符的个数

        频繁的操作我就不做了,之前其他版块讨论过判断字符串长度的代码
可以搜搜。
作者: keen    时间: 2009-7-30 10:30     标题: 回复 8楼 的帖子

IF_EXIST兄的1.2代码,很简单,我就没有多想,直接两个IF连用。
赞一个,加个分。
作者: inittab    时间: 2009-7-31 15:55

凑个热闹,
  1. @echo off
  2. set /p aa=请输入字串:
  3. echo =======================
  4. ::第一种
  5. echo %aa% | find "s">nul && echo 存在s || echo 不存在s
  6. ::第二种
  7. if "%aa:s=%"=="%aa%" (echo 不存在s) else echo 存在s
  8. ::第三种
  9. for /f "tokens=1,2 delims=s" %%a in ("a%aa%a") do if "%%b"=="" (echo 不存在s) else echo 存在s
  10. set /p a=输入变量a:
  11. set /p b=输放变量b:
  12. echo ==========================
  13. echo 问题:验证是否a=1且b=2
  14. if %a% equ 1 (if %b% equ 2 (echo 成立) else echo 不成立) else echo 不成立
  15. pause
复制代码
if "%a%_%b%"=="1_2" (echo yes) else (echo no)
是个好思路,但如果输入a或b时前后不小心带入空格。就不行了,个人觉得用equ 来作数字判断会比较好,可能有点鸡蛋挑骨头。呵呵

[ 本帖最后由 inittab 于 2009-7-31 16:07 编辑 ]
作者: 523066680    时间: 2009-7-31 17:31

非常感谢楼上的回帖。

(有认真想题的都是有一定等级的同学~ ,可见不回答的新手的态度……)

关于楼上说的也对。我想带空格的话 也可以 %a: =%,但也不必了。
因为对于其他情况,很多很多~  所以特使情况特殊对待了。


而判断是否s 的 也很怕 特殊字符的出现 比如后两种办法 字符串中有奇数个双引号时
可能出错。
作者: inittab    时间: 2009-7-31 18:48     标题: 回复 13楼 的帖子

不客气。
也谢谢你和论坛各位版主,让大家在论坛学到很多。
作者: ghostwar    时间: 2009-9-30 07:52

写到一半写不下去!
     看来还得加油!
        看几位写的顿时让我茅舍顿开!
                               谢......
作者: hkxc    时间: 2009-10-6 20:37

不会,一定会努力学习的
作者: Seter    时间: 2009-10-9 19:49

1.1来个另类的,不支持特殊字符
  1. set/pi=&md "%temp%\tmp"
  2. echo\>"%temp%\tmp\%i%"
  3. set i=no&for %%i in ("%temp%\tmp\*s*") do set i=yes
  4. echo %i%&rd /s/q "%temp%\tmp"
复制代码
TRY!
作者: dukeguoqi    时间: 2009-10-29 18:44

学习了!谢谢各位高手了
作者: batman    时间: 2009-10-29 21:29     标题: 针对第二题的:

也是比较另类的,不用if:
set /a num=3/(a-1) >nul 2>nul||set /a num=3/(b-2) >nul 2>nul||echo a等于1,b等于2

[ 本帖最后由 batman 于 2009-10-29 21:35 编辑 ]
作者: 523066680    时间: 2009-10-30 08:30

搜嘎嘚斯,前辈捧场了。
作者: pk618    时间: 2009-11-3 16:35

版主,要是出了答案加上讲解应该会让初学者更容易明白
作者: 523066680    时间: 2009-11-3 18:05

哪里,这题本来就是对基础问题的小测试。
当然有疑问也可以说哈,版主通常也很热情的,不过每次都解释的话对热情很消磨的
作者: pumahxh    时间: 2009-11-10 18:37

  1. rem 问题1.1
  2. @echo off&cls
  3. set /p str=请输入字符:
  4. echo.%str% | find "s"
  5. if %errorlevel%==0 (echo 字符串中有s) else (echo 字符串中没有s)
  6. pause
  7. rem 问题1.2
  8. set /p a=请输入数字a:
  9. set /p b=请输入数字b:
  10. if %a% equ 1 (
  11.    if %b% equ 2 (
  12.       echo 你输入的数字a=1,而且b=2) else (echo 你输入的数字a=1,但b不等于2)
  13. ) else (
  14.   if %b% equ 2 (
  15.       echo 你输入的数字a不等1,但b=2) else (echo 你输入的数字a不等于1,且b不等于2)
  16. )
  17. pause
复制代码

作者: zgq0301    时间: 2009-11-13 21:24

  1. @echo off &setlocal enabledelayedexpansion
  2. set /p str=Please input random string:&set a=&set /a var=0&set /a num=0
  3. :loop
  4. for %%i in (%str%) do (
  5.     call set a=%%str:~!var!,1%%
  6.     set /a err=!errorlevel!
  7.     set /a var+=1
  8.     if "!a!"=="s" set /a num+=1
  9.     if !err! equ 0 goto :loop )
  10. if %num% neq 0 ( echo contain s!) else ( echo not contain )
  11. pause>nul
复制代码

1.2   同时判断两个数字变量a 和 b  是否 a=1 且 b=2
  1. @echo off&cls
  2. set /p a=please input a number
  3. set /p b=please input a number
  4. if "12"=="%a%%b%" (echo  a 和 b  是 a=1 且 b=2) else (echo a 和 b  不是 a=1 且 b=2)
  5. pause
复制代码

[ 本帖最后由 zgq0301 于 2009-11-13 21:35 编辑 ]
作者: Kenmick    时间: 2010-1-20 16:28     标题: 本人新手只会用这种方法了额 ~~~

  1. @echo off
  2. set /p a=请输入
  3. echo %a%|find "s" >nul
  4. if "%errorlevel%"=="0" (echo 含有s) else echo 不含s
  5. pause >nul
复制代码
没有各位大虾的简洁额   - -b
作者: Kenmick    时间: 2010-1-20 17:24     标题: 继续答题额~~~~~~~~

  1. @echo off
  2. set /p a=请输入a的值
  3. set /p b=请输入b的值
  4. if "%a%"=="1" (if "%b%"=="2" (echo right) else echo wrong) else echo wrong   
  5. pause >nul
复制代码

作者: wgoxm521    时间: 2010-1-23 14:29

呵呵。不潜水了,看看答案先。
作者: aiguozhe    时间: 2010-1-31 20:29

第一条题目,我想先用for逐个提取字符串里面的字符,然后用IF语句来判断下,但是貌似字符串要分开写,方法太笨拙!
没能力写,看看高手的答案

第2个题目简单,我新手,简单写个
@echo off
set /p a=请输入:
set /p b=请输入:
if "%a%"=="1" (goto zhe) else echo 变量a不等于1
:zhe
if "%b%"=="1" (echo a=1且b=1) else echo 变量b不等于1
pause>nul
作者: aiguozhe    时间: 2010-1-31 20:31

题目看错了,b=2,晕哈
作者: 634175535    时间: 2010-4-26 09:01

试了很久也没有成功因此请求高手!
作者: poxi    时间: 2010-7-19 19:39

A1:
  1. @echo off
  2. set /p s=请随便输入一个字符串
  3. set s_=%s:s=%
  4. if “%s%”==“%s_%” (echo 里面没有s哦) else echo 里面有s哦
  5. pause
复制代码

A2
  1. @echo off
  2. set /p a=请随便输入一个字符串
  3. set /p b=请再随便输入一个字符串
  4. if "%a:a=%"=="" if "%b:b=%"=="' (echo 符合要求) else echo 不符合要求
  5. pause
复制代码

=========
end;

[ 本帖最后由 poxi 于 2010-7-19 19:40 编辑 ]
作者: fish    时间: 2010-8-8 00:26

原帖由 batman 于 2009-10-29 21:29 发表
也是比较另类的,不用if:
set /a num=3/(a-1) >nul 2>nul||set /a num=3/(b-2) >nul 2>nul||echo a等于1,b等于2

给batman管理员前辈挑点小问题,前辈您从数学的角度考虑该题感觉有点跑题(当然思路是相当发人深省的绝妙的并且值得赞叹的),晚辈举一反例加以论证,如果a=1.0可兼或b=1.0等情况,亦即两者在数值上等于1,那么您这代码也会回显"a等于1,b等于2"这句话,如果楼主前辈的意思就是判断数值上的等于,那么您的答案就恰到好处了,但是这样一来,楼主前辈的答案就错了(因为楼主前辈的答案判断的是右值相等而非数值相等),总之,您两位前辈总有一位是不符合题意的,归根结底是楼主的题目表述不清含有二义性所致,当然了,晚辈没有什么人身攻击的意思,相反晚辈还相当敬仰两位前辈的超凡的智慧与过人的才能呢,所以,如有语言过激之处,还请两位前辈定当多多包涵才是。。。

[ 本帖最后由 fish 于 2010-8-8 00:32 编辑 ]
作者: 523066680    时间: 2010-8-23 14:11     标题: 回复 32楼 的帖子

你真有耐心啊,说1是1说2是2.
如果是1.0 的话 set 也会出错吧?  批处理不支持小数啊。
作者: fish    时间: 2010-8-24 23:15     标题: 回复 34楼 的帖子

所以说嘛,无论batman管理员前辈的那个批处理中a是1点几,结果a变量存储的还是1啊,所以似乎是不太符合前辈您的题目要求啊,当然,我说过了,如果楼主前辈的意思就是判断数值上(取整之后)的等于,那batman管理员前辈就对了,但是楼主前辈又不对了。
作者: Hello123World    时间: 2011-7-14 14:16

1.
  1. @echo off
  2. Set /p "a=请输入:"
  3. If  %a:s=%==%a% (Echo %a%不含有s) Else (Echo %a%含s)
  4. pause
复制代码
2.
  1. @echo off
  2. Set /p "a=请输入:"
  3. Set /p "b=请输入:"
  4. If "%a%%b%"=="12" (Echo Yes) Else (Echo No)
  5. ::连下划线都可以省略的
  6. pause
复制代码

作者: Hello123World    时间: 2011-7-14 14:24

12# inittab
==和equ有却别吗?——我测试是一丁点区别也没有,当然写起来有区别就是了。
作者: 523066680    时间: 2011-7-14 15:46

36# Hello123World


下划线不应该省略因为 a=12 ,b=空的情况 或者 a=空 b=12
作者: mxxcgzxxx    时间: 2011-7-14 18:27

第二题来个新思路
  1. echo off
  2. set /p a=
  3. set /p b=
  4. set/a b/=a*=-1
  5. if "%a%%b%"=="-1-2" (echo yes) else (echo no)
  6. pause
复制代码

作者: scarcr    时间: 2011-8-7 21:25

这样可不可以。
  1. if "%var%"=="%var:s=%" (echo this string contains  "s") else (echo the string doesn't contain "s")
复制代码
  1. if not %a% equ 1 (goto :eof) else if not %b% equ 1 (goto :eof) else (echo a=1,b=1)
复制代码

作者: 小胖狐狸    时间: 2011-11-10 12:06

回复 8# 523066680


    搜到关于“下划线”的回复看到这个帖子的,长见识了,思路确实很重要!第一题的思路超简洁啊!第二题的甄别符加得真好!学习了
作者: xhhivi    时间: 2012-5-3 23:33

本帖最后由 xhhivi 于 2012-5-4 22:00 编辑

40楼的"%var:s=%"是什么意思啊?没看懂
网上找了一圈估计是这个意思:%VAR:str1=str2%   会将VAR中的str1替换为str2(str2如果为空则可以达到删除的效果
做个记号
作者: 秋风·飞扬    时间: 2012-5-4 09:11

啊啊啊啊啊啊啊,我来晚了啊
作者: cjiabing    时间: 2012-5-4 15:20

这种题不应该叫IF命令的练习题,因为练习的核心还是思路和SET命令!~
作者: 刘康    时间: 2012-5-21 12:13

@ECHO OFF
IF ERRORLEVEL 1 GOTO 1
IF ERRORLEVEL A GOTO A
:A
ECHO 命令
GOTO EXIT
………同上
PAUSE
作者: 唯尘    时间: 2024-1-25 17:35

@echo off
setlocal enabledelayedexpansion
set /p str=请输入需要判断字符串:
:loop
set /a n+=1
set var=!str:~%n%,1!
echo %var%
if "!var!"=="s" (echo 存在字符s & goto :eof) else (
        if "!var!"=="" (@goto a) else (goto loop)
)
:a
echo 不存在字符s
pause>nul&exit
作者: 唯尘    时间: 2024-1-25 17:57

@echo off
set /p a=请输入第一个判断数字:
set /p b=请输入第二个判断数字:
set a=%a:"=%&set b=%b:"=%
if "%a%"=="1" (if "%b%
"=="2" (echo OK) else (echo Bad)) else (echo Bad)
pause>nul 2>nul
作者: 唯尘    时间: 2024-3-18 08:30

@echo off
set /p str=请输入需要判断的字符串:
set str1=%str:s=%
if /i %str1%==%str% (echo 不存在s) else (echo 存在s)
pause>nul

@echo off
set /p a=请输入第一个判断词:
set /p b=请输入第二个判断词:
if %a%==1 (if %b%==2 (echo a=1 并且 b=2) else (echo a,b条件不同时成立)) else (echo 条件不成立)
pause>nul
作者: 唯尘    时间: 2024-4-24 08:27

@echo off
set /p str=请输入需要判断的字符串:
if %str%==%str:s=% (echo 字符串不存在s字符) else (echo 字符串存在s字符)
pause>nul


@echo off
set /p a=请输入第一个判断值:
set /p b=请输入第二个判断值:
if %a%==1 (if %b%==2 (echo ok) else (echo bad)) else (echo bad)
pause>nul
作者: Batcher    时间: 2024-4-24 08:43

回复 48# 唯尘


if命令的建议:

作者: 唯尘    时间: 3 天前 08:20

@echo off
set /p var=请输入需要判断的字符串:
if "%var%"=="%var:s=%" (
        echo 字符串不包含s
) else (
        echo 字符串包含s
)
pause>Nul 2>nul
作者: 唯尘    时间: 3 天前 08:21

回复收到,3Q~ 49# Batcher




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