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

【练习-022】批处理对特殊字符的输出挑战

出题目的:
       1 解决新手们对特殊字符的恐慌问题,增强大家信心
       2 掌握开启变量延迟的时机(技巧)
       3 重温随机取值
加分原则:
       1 思路新颖基分5分
       2 代码高效基分4分
       3 代码简洁基分3分
       4 代码通用基分2分
       5 无临时文件基分1分
       6 完美代码加15分
题目如下:
       要求通过批处理输出10行每行30个由特殊字符随机组成的字符串(见举例)
  1. \<^=|>*)(~$=!$==###"^!!&#*^~')
  2. "^:*\*)>^&:@<%:"^>^'|(^~!)&&|&
  3. %)'(^)$!|~'!%||##(%*):$(!>)%:&
  4. ^!"'@\\~$>$*@~:'=='(=)|(^=|&%|
  5. %)'&*'&&&>@^~"*^*||>$~|<!'<%=&
  6. (|"\~**'^@^|))#@%$|^%)|#&**%<"
  7. ~)|\!(%:\#%>>#$&<&~!)@~~~=>!'*
  8. |*'&<<$$!\%**:$*'=\"!$&|)#(*|~
  9. #=\@@)<\=!%'(~\)":#<&%"'*!^>&~
  10. :^@^^*>!\~%$%$=\=$>|%$~@"\~&#*
复制代码
[ 本帖最后由 batman 于 2008-9-7 09:49 编辑 ]
***共同提高***

先来抛砖,没啥新意。
  1. :?^~!#$%^&*()='"><|/@\
  2. @echo off
  3. set/p str=<%~fs0
  4. setlocal enabledelayedexpansion
  5. for /l %%a in (1 1 10) do (
  6.      for /l %%i in (1 1 30) do (
  7.           set/a n=!random!%%22
  8.           call :lp
  9.      )
  10.      echo !var!&set "var="
  11. )
  12. pause>nul&exit/b
  13. :lp
  14. set "var=!var!!str:~%n%,1!"
复制代码

[ 本帖最后由 pusofalse 于 2008-9-7 18:18 编辑 ]
3

评分人数

心绪平和,眼藏静谧。

TOP

提示:对特殊字符输出有一个关键的步骤,那就是转义,将特殊字符转义。
***共同提高***

TOP

越搞越糊涂了....

还是回去想想,占个位子...

TOP

有个小问题,不用call直接把
set "var=!var!!str:~%n%,1!"
这一句加在随机数的后面怎么不行?把%n%也替换成了!n!,但是出来的是一片片特殊字符,根本没按代码写的按三十个输出。
只有说出来被人嘲笑的才是理想。

TOP

5# superbat
你这样就试
  1. :~!@#$%^&*()<>"/\|'=;
  2. @echo off
  3. set/p str=<%~fs0 >nul
  4. setlocal enabledelayedexpansion
  5. for /l %%a in (1 1 10) do (
  6.      set "var="
  7.      for /l %%b in (1 1 30) do (
  8.         set/an=!random!%%21
  9.         for %%c in (!n!) do set "var=!var!!str:~%%c,1!"
  10.      )
  11.      echo !var!
  12. )
  13. pause
复制代码

TOP

不错
爱好 就是快死也要鼓捣的东西

TOP

感觉batman出的题目都太难了,用作挑战题才恰当。

TOP

  1. sed -n p test.txt
复制代码

TOP

回复 9# Seder


test.txt是不存在的
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10# Batcher


    看错题了

TOP

命令提示符下运行:
  1. gawk "BEGIN{srand();for(i=0;i<10;i++){for(j=0;j<30;j++){aryRand[0]=int(15*rand()+33);aryRand[1]=int(5*rand()+58);aryRand[2]=int(4*rand()+91);aryRand[3]=int(4*rand()+123);printf(\"%c\",aryRand[int(4*rand())]);}print \"\";}}"
复制代码

若保存为bat,则保存这个:
  1. gawk "BEGIN{srand();for(i=0;i<10;i++){for(j=0;j<30;j++){aryRand[0]=int(15*rand()+33);aryRand[1]=int(5*rand()+58);aryRand[2]=int(4*rand()+91);aryRand[3]=int(4*rand()+123);printf(\"%%c\",aryRand[int(4*rand())]);}print \"\";}}"
复制代码

TOP

  1. @echo off
  2. set "$=!#$%%&'()*+,-./:;<=>?@[\]^_`{|}~""
  3. setlocal enabledelayedexpansion
  4. (for /l %%i in (1, 1, 10) do (
  5.     set "_="
  6.     for /l %%j in (1, 1, 30) do (
  7.         set /a n = !random! %% 32
  8.         for /l %%k in (!n!, 1, !n!) do (
  9.             set "_=!_!!$:~%%k,1!"
  10.         )
  11.         
  12.     )
  13.     echo !_!
  14. )) > 1.txt
  15. pause
复制代码
1

评分人数

    • batman: 兄弟也有心做这样的题,难能可贵PB + 15

TOP

set "dm=:?^~!#$%^&*()='"><|/@\"
@echo off
setlocal enabledelayedexpansion
for /l %%a in (0 1 9) do (
     set text=<nul
     for /l %%i in (1 1 30) do (
          set/a zifu=!random!%%22
          call set zifu=^%%dm:~!zifu!,1%%
          set text=!text!!zifu!
     )
     echo;!text!
)

TOP

原来我当时没有贴出自己的代码,现在补写一个:
  1. @echo off
  2. set "str=:~!@#$%%&*()_-+={[]}|\:;'<,.>?/^^""
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (1,1,10) do (
  5.   for /l %%b in (1,1,30) do (
  6.     set /a a=!random!%%33
  7.     for %%c in (!a!) do set "var=!var!!str:~%%c,1!"
  8.   )
  9.   echo !var!&set "var="
  10. )  
  11. pause>nul
复制代码
***共同提高***

TOP

返回列表