标题: 【练习-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个由特殊字符随机组成的字符串(见举例)- \<^=|>*)(~$=!$==###"^!!&#*^~')
- "^:*\*)>^&:@<%:"^>^'|(^~!)&&|&
- %)'(^)$!|~'!%||##(%*):$(!>)%:&
- ^!"'@\\~$>$*@~:'=='(=)|(^=|&%|
- %)'&*'&&&>@^~"*^*||>$~|<!'<%=&
- (|"\~**'^@^|))#@%$|^%)|#&**%<"
- ~)|\!(%:\#%>>#$&<&~!)@~~~=>!'*
- |*'&<<$$!\%**:$*'=\"!$&|)#(*|~
- #=\@@)<\=!%'(~\)":#<&%"'*!^>&~
- :^@^^*>!\~%$%$=\=$>|%$~@"\~&#*
复制代码
[ 本帖最后由 batman 于 2008-9-7 09:49 编辑 ]
作者: pusofalse 时间: 2008-9-7 18:17
先来抛砖,没啥新意。- :?^~!#$%^&*()='"><|/@\
- @echo off
- set/p str=<%~fs0
- setlocal enabledelayedexpansion
- for /l %%a in (1 1 10) do (
- for /l %%i in (1 1 30) do (
- set/a n=!random!%%22
- call :lp
- )
- echo !var!&set "var="
- )
- pause>nul&exit/b
- :lp
- 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
你这样就试- :~!@#$%^&*()<>"/\|'=;
- @echo off
- set/p str=<%~fs0 >nul
- setlocal enabledelayedexpansion
- for /l %%a in (1 1 10) do (
- set "var="
- for /l %%b in (1 1 30) do (
- set/an=!random!%%21
- for %%c in (!n!) do set "var=!var!!str:~%%c,1!"
- )
- echo !var!
- )
- pause
复制代码
作者: liusen 时间: 2011-4-11 07:46
不错
作者: Hello123World 时间: 2011-7-19 17:42
感觉batman出的题目都太难了,用作挑战题才恰当。
作者: Seder 时间: 2011-9-9 01:04
复制代码
作者: Batcher 时间: 2011-9-9 19:00
回复 9# Seder
test.txt是不存在的
作者: Seder 时间: 2011-9-9 21:10
回复 10# Batcher
看错题了
作者: Seder 时间: 2011-9-12 13:20
命令提示符下运行:
- 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,则保存这个:- 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
- @echo off
- set "$=!#$%%&'()*+,-./:;<=>?@[\]^_`{|}~""
- setlocal enabledelayedexpansion
- (for /l %%i in (1, 1, 10) do (
- set "_="
- for /l %%j in (1, 1, 30) do (
- set /a n = !random! %% 32
- for /l %%k in (!n!, 1, !n!) do (
- set "_=!_!!$:~%%k,1!"
- )
-
- )
- echo !_!
- )) > 1.txt
- 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
原来我当时没有贴出自己的代码,现在补写一个:- @echo off
- set "str=:~!@#$%%&*()_-+={[]}|\:;'<,.>?/^^""
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,10) do (
- for /l %%b in (1,1,30) do (
- set /a a=!random!%%33
- for %%c in (!a!) do set "var=!var!!str:~%%c,1!"
- )
- echo !var!&set "var="
- )
- 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
- [code][code][code][code][script]alert('Good!')[/script]
复制代码
[/code][/code][/code][/code]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |