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

TOP

回复 16# jinzeyu

此题确实有点难懂,就这样吧,第一次取0-2012间的随机值,如取到948,就取948到2012间的随机值,依次下去,直到取到2012。。。
***共同提高***

TOP

本帖最后由 QIAOXINGXING 于 2012-2-22 22:42 编辑

1
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set /p a=输入一个四位数:
  3. for /l %%i in (0 1 3) do (set "b=!b! !a:~%%i,1!")
  4. echo !b!
  5. echo ---------------
  6. for /l %%i in (0 1 3) do (set "c= !a:~%%i,1!!c!")
  7. echo !c!
  8. echo ---------------
  9. for /l %%i in (0 1 3) do (echo !a:~%%i,1!)
  10. echo ---------------
  11. for /l %%i in (3 -1 0) do (echo !a:~%%i,1!)
  12. echo ---------------
  13. pause
复制代码
2
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set /p a=输入一个四位数:
  3. for /l %%i in (0 1 3) do (
  4. set /a "b=!b!+!a:~%%i,1!"
  5. set "bb=!bb!+!a:~%%i,1!"
  6. )
  7. set "bb=!bb:~1!"
  8. echo !bb!=!b!
  9. pause
复制代码
3
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set "n=0"
  3. :a
  4. set /a "n+=1"
  5. if not "!random!"=="2012" ( cls&echo 第 !n! 次 &goto :a) else (echo 行勒!! 共 !n! 次)
  6. pause
复制代码
看了下前面的帖子:
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. :start
  3. for /l %%i in (1 1 1000) do (
  4.   set /a "n+=1"
  5.   if !random!==2012 (echo ok & pause & exit) else (cls & echo 第 !n! 次)
  6. )
  7. goto :start
  8. rem 纯 goto 效率确实很低,for的确强大。
  9. rem for 语句的上限是1000还是100000000,速度差别很小
  10. rem 两个 bat 同时运行,最后的次数是一样的。。。。。。
复制代码
4
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set "b=32768"
  3. set "c=0"
  4. set "n=0"
  5. :go1
  6. set /a "n+=1"
  7. set /a  "a=!random!%%!b!+!c!"
  8. if !a! lss 2012 (if !a! gtr !c! set "c=!a!")
  9. if !a! gtr 2012 (set /a "b1=!a!-!c!" & if !b1! lss !a! set /a "b=!a!-!c!")
  10. if !a! equ 2012 echo 共 !n! 次 & pause &exit
  11. echo !a!
  12. goto :go1
复制代码
5
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set /p a=输入年份:
  3. set /a "b1=!a!%%4"
  4. set /a "b2=!a!%%100"
  5. set /a "b3=!a!%%400"
  6. if "!b3!"=="0" (set "d=0"
  7. ) else (
  8.   if not "!b2!"=="0" (if "!b1!"=="0" set "d=0")
  9. )
  10. if defined d (echo 是闰年) else (echo 不是闰年)
  11. pause
复制代码
6
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set "a=31 29 31 30 31 30 31 31 30 31 30 31"
  3. for /l  %%i in (0 3 33) do (
  4.   set /a "m=%%i/3+1"
  5.   set "n=!a:~%%i,2!"
  6.   for /l %%a in (1 1 !n!) do (
  7.     echo 2012 年 !m! 月 %%a 日
  8.   )
  9. )
  10. pause
复制代码
7
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set "a=xls doc txt pdf gpg"
  3. for %%i in (!a!) do (>2012.%%i echo 2012 0)
  4. rem 今天第一次见 “>”的前置用法。。。。。才知道了还有“句柄”这词儿。。。。
  5. pause
复制代码
8
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set /p n=输入数字:
  3. set "aa=零 一 二 三 四 五 六 七 八 九"
  4. set "a=-1"
  5. for  %%i in (!aa!) do (
  6. set /a a+=1
  7. set "b=%%i"
  8. call  set "n=%%n:!a!=!b!%%"
  9. )
  10. echo !n!
  11. pause
复制代码
9
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set "nn=0"
  3. :start
  4. set /p nn=输入位数不超过5的数字:
  5. set "n="
  6. set "n4="
  7. set "n3="
  8. set "n2="
  9. for /l %%i in (0 1 3) do (set "n= !nn:~%%i,1!!n!")
  10. rem 数字间加空格并倒序
  11. set "aa=零 一 二 三 四 五 六 七 八 九"
  12. set "a=-1"
  13. for  %%i in (!aa!) do (
  14. set /a a+=1
  15. set "b=%%i"
  16. call  set "n=%%n:!a!=!b!%%"
  17. )
  18. rem 阿拉伯数字变为汉字
  19. set "x=0"
  20. for %%i in (!n!) do (set /a x+=1 & set n!x!=%%i)
  21. if defined n4 (set n=!n4!千!n3!百!n2!十!n1! ) else (
  22. if defined n3 (set n=!n3!百!n2!十!n1!) else (
  23. if defined n2 (set n=!n2!十!n1!) else (
  24. if defined n1 set n=!n1!)))
  25. rem 判断位数
  26. set "n=!n:零百=零!"
  27. set "n=!n:零十=零!"
  28. set "n=!n:十零=十!"
  29. set "n=!n:零零=零!"
  30. set "n=!n:零零=零!"
  31. if "!n2!!n1!"=="零零" set "n=!n:百零=百!"
  32. if "!n3!!n2!!n1!"=="零零零" set "n=!n:千零=千!"
  33. echo !n!
  34. echo ---------------------------------
  35. goto :start
复制代码
10
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. set "a1=希望今年能少蛋疼。。。"
  3. set "a2=希望世界上所有人都好好的。。。"
  4. set "a3=谢谢!!!!!!"
  5. :go1
  6. set /a "a+=1"
  7. call set "b=%%a!a!%%"
  8. for /l %%i in (0 1 20) do (
  9. set /p=!b:~%%i,1!<nul
  10. ping 127.1 /n 1 >nul
  11. )
  12. echo.
  13. if "!a!"=="3" pause >nul & exit
  14. goto :go1
复制代码
1

评分人数

    • batman: 书写较规范,但是变量延迟有点滥用了,加油 ...PB + 80

TOP

本帖最后由 BAT1 于 2012-2-20 14:24 编辑

回复 17# batman


    请将要求更新至顶楼!
(这句话平时都是版主对我们说的,想不到今天我却对超级版主说 /汗)
1

评分人数

TOP

我7天前做完了 管理员能否帮忙看一看

TOP

本帖最后由 batman 于 2012-2-28 10:19 编辑

由于本人工作原因
一直没有时间仔细看看代码很是对不起大家了
今天终于抽出时间来阅读了大家的解法和思路
但还是由于时间原因不能做到细致详实敬请谅解
同时希望大家在帖子能踊跃跟帖进行充分的讨论
毕竟讨论才出真知嘛。。。
***共同提高***

TOP

回复 11# batman


    呵呵 第九题慢了点...

TOP

回复 21# batman


   
但是变量延迟有点滥用了

嗯,我是一上来不管用不用,先把变量延迟打开,能用!!坚决不用%% 。
开变量延迟有什么不利还是不清楚,是不是会增加预处理的次数,从而影响速度??还会影响某些应用??

您在第 8 题 用:for %%b in (!str!) do set /p=!_%%b!<nul
我觉得这句样更好理解:  call set /p=%%_!str!%%<nul
您也是出于变量延时的考虑吗??

TOP

回复 23# QIAOXINGXING


    兄弟注意到我顶楼给出的答案中的第五题中写的备注不。。。
***共同提高***

TOP

回复 24# batman


    注意到了。。
您的意思是:有些地方不能开变量延迟??开了会影响某些应用??

我是说:在既能用!!,又能用%%的情况下,优先选择 !! 除了要多写一句话以外,有没有其他什么不好的??

TOP

请问超版,第三题我用这种方式生成2012,是不是不妥,或者根本就是错的?
  1. @echo off
  2. set n=0&set str=
  3. call :loop 2 0 1 2
  4. echo %str%运行了%n%次&pause&exit
  5. :loop
  6. if "%1"=="" goto :eof
  7. set/a n+=1&set aa=%random:~-1%
  8. if "%aa%"=="%1" (set str=%str%%aa%&shift&goto loop) else goto loop
复制代码

TOP

本帖最后由 guaiwu 于 2012-3-1 20:19 编辑

问题纯属自己思考,也没看其他的“同鞋”的,还有需要补充的。待续...
 1、在屏幕上分别分行和同行输出2012字符串的2 0 1 2四个字符以及反序输出(在这里要将2012视为不可知数值)
  2、计算2012字符串四个数值的和(在这里要将2012视为不可知数值)
  1. @echo off
  2. set /p aa=
  3. set /a b=%aa:~0,-3%+%aa:~1,-2%+%aa:~2,-1%+%aa:~3%
  4. echo %b%
  5. pause
复制代码
3、利用random生成2012,并计算random的次数
  1. @echo off&setlocal enabledelayedexpansion
  2. :random
  3. set/a i=%random%%%2012+1
  4. echo %i%
  5. set /a a+=1
  6. if %i%==2012 goto yes
  7. goto random
  8. :yes
  9. echo 第!a!次找到了%i%
  10. pause
复制代码
4、利用random生成2012,并保证每次使用最少的random次数(第一次取0-2012间的随机值,如取到948,就取948到2012间的随机值,依次下去,直到取到2012。。。)
  1. @echo off
  2. set /a b=%random% %%2012+1
  3. :with
  4. set /a n+=1
  5. set /a aa=2013-%b%
  6. set /a b=%random% %%%aa%+%b%
  7. set /a aa=%b%
  8. echo %b%
  9. if %b% == 2012 goto ok
  10. goto with
  11. :ok
  12. echo 第%n%次找到了%b%
  13. pause
复制代码
5、证明2012年是闰年(在这里要将2012视为不可知数值)
  1. @echo off
  2. set /p a=
  3. set /a b=%a%%%4
  4. if %b% == 0 echo %a%年是闰年
  5. pause
复制代码
6、输出2012年所有的日期
  7、分别生成以2012命名的xls word txt pdf gpg的文件并在里面输入“2012 0”字符
  8、将2012转换成二零一二(在这里要将2012视为不可知数值)
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p aa=输入一个四位数:
  3. set a=%aa:~-1%
  4. for %%i in (%aa:~0,-3%,%aa:~1,-2%,%aa:~2,-1%,%aa:~3%) do (
  5. set /a n+=1
  6. if %%i == 0 set .!n!=零
  7. if %%i == 1 set .!n!=一
  8. if %%i == 2 set .!n!=二
  9. if %%i == 3 set .!n!=三
  10. if %%i == 4 set .!n!=四
  11. if %%i == 5 set .!n!=五
  12. if %%i == 6 set .!n!=六
  13. if %%i == 7 set .!n!=七
  14. if %%i == 8 set .!n!=八
  15. if %%i == 9 set .!n!=九
  16. )
  17. cls
  18. echo 转换中文为:%.1%%.2%%.3%%.4%
  19. pause>nul
复制代码
9、将1-2012之间的数值全转换成中文数值,如2001转换成二千零一
  10、写出一段关于2012年的感想或祝福,并在屏幕上逐字逐行延时输出
莫求昨天无悔,但愿今日无愧。

TOP

返回列表