Board logo

标题: 【练习-022】批处理对特殊字符的输出挑战 [打印本页]

作者: batman    时间: 2008-9-7 09:44     标题: 【练习-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 编辑 ]
作者: pusofalse    时间: 2008-9-7 18:17

先来抛砖,没啥新意。
  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 编辑 ]
作者: batman    时间: 2008-9-7 19:18

提示:对特殊字符输出有一个关键的步骤,那就是转义,将特殊字符转义。
作者: qq641255849    时间: 2008-9-7 19:20

越搞越糊涂了....

还是回去想想,占个位子...
作者: superbat    时间: 2011-3-27 10:25

有个小问题,不用call直接把
set "var=!var!!str:~%n%,1!"
这一句加在随机数的后面怎么不行?把%n%也替换成了!n!,但是出来的是一片片特殊字符,根本没按代码写的按三十个输出。
作者: terse    时间: 2011-4-3 14:50

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
复制代码

作者: liusen    时间: 2011-4-11 07:46

不错
作者: Hello123World    时间: 2011-7-19 17:42

感觉batman出的题目都太难了,用作挑战题才恰当。
作者: Seder    时间: 2011-9-9 01:04

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

作者: Batcher    时间: 2011-9-9 19:00

回复 9# Seder


test.txt是不存在的
作者: Seder    时间: 2011-9-9 21:10

回复 10# Batcher


    看错题了
作者: Seder    时间: 2011-9-12 13:20

命令提示符下运行:
  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 \"\";}}"
复制代码

作者: Demon    时间: 2012-8-19 15:25

  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
复制代码

作者: 路过    时间: 2012-10-20 16:05

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!
)
作者: batman    时间: 2012-11-23 09:47

原来我当时没有贴出自己的代码,现在补写一个:
  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
复制代码

作者: Taurus    时间: 2012-12-12 10:53

本帖最后由 Taurus 于 2012-12-12 10:56 编辑

呀 ..... 樓主沒寫要求....

@echo off&more +3 %0
set/p=
<
\<^=|>*)(~$=!$==###"^!!&#*^~')
"^:*\*)>^&<%:"^>^'|(^~!)&&|&
%)'(^)$!|~'!%||##(%*)(!>)%:&
^!"'@\\~$>$*@~:'=='(=)|(^=|&%|
%)'&*'&&&>@^~"*^*||>$~|<!'<%=&
(|"\~**'^@^|))#@%$|^%)|#&**%<"
~)|\!(%:\#%>>#$&<&~!)@~~~=>!'*
|*'&<<$$!\%**:$*'=\"!$&|)#(*|~
#=\@@)<\=!%'(~\)":#<&%"'*!^>&~
:^@^^*>!\~%$%$=\=$>|%$~@"\~&#*

作者: vsbat    时间: 2013-1-5 11:39

  1. [code][code][code][code][script]alert('Good!')[/script]
复制代码
[/code][/code][/code][/code]




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