Board logo

标题: [文本处理] 把论坛的批处理精华下载,按照自己的思路写,call:pl的位置问题 [打印本页]

作者: wokong    时间: 2014-1-4 19:41     标题: 把论坛的批处理精华下载,按照自己的思路写,call:pl的位置问题

本帖最后由 wokong 于 2014-1-4 19:46 编辑

这个是论坛的原题: 要求通过批处理输出10行每行30个由特殊字符随机组成的字符串(见举例)
这个是标准答案
  1. 代码:
  2. :?^~!#$%^&*()='"><|/@\
  3. @echo off
  4. set/p str=<%~fs0
  5. setlocal enabledelayedexpansion
  6. for /l %%a in (1 1 10) do (
  7.      for /l %%i in (1 1 30) do (
  8.           set/a n=!random!%%22
  9.           call :lp
  10.      )
  11.      echo !var!&set "var="
  12. )
  13. pause>nul&exit/b
  14. :lp
  15. set "var=!var!!str:~%n%,1!"
复制代码
这个是正确结果
\<^=|>*)(~$=!$==###"^!!&#*^~')
"^:*\*)>^&<%:"^>^'|(^~!)&&|&
%)'(^)$!|~'!%||##(%*)(!>)%:&
^!"'@\\~$>$*@~:'=='(=)|(^=|&%|
%)'&*'&&&>@^~"*^*||>$~|<!'<%=&
(|"\~**'^@^|))#@%$|^%)|#&**%<"
~)|\!(%:\#%>>#$&<&~!)@~~~=>!'*
|*'&<<$$!\%**:$*'=\"!$&|)#(*|~
#=\@@)<\=!%'(~\)":#<&%"'*!^>&~
:^@^^*>!\~%$%$=\=$>|%$~@"\~&#*

下面这个是我的代码 仅仅换了下位置,为啥就截然不同了,我的2种写法结果都不对。
《1》
  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.           set var=!var!!str:~!n!,1!"
  9.      )
  10.      echo !var!&set "var="
  11. )
  12. pause>nul&exit/b
  13. :lp
复制代码
《2》
  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.           set var=!var!!str:~%n%,1!"
  9.      )
  10.      echo !var!&set "var="
  11. )
  12. pause>nul&exit/b
  13. :lp
复制代码

作者: wokong    时间: 2014-1-5 23:53

貌似没一个人呢
作者: DAIC    时间: 2014-1-6 08:50

你的call命令在哪里?
作者: DAIC    时间: 2014-1-6 08:52

你的第一种写法里面:
  1. set var=!var!!str:~!n!,1!"
复制代码
这样的变量嵌套在语法上就是错误的
作者: 我来了    时间: 2014-1-7 18:57

大才们的问题,我全不会。只会用技巧。IDM就能办到。
作者: wokong    时间: 2014-1-7 22:09

等了几天?没人?
作者: terse    时间: 2014-1-7 22:17

这样就好了
  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
复制代码

作者: DAIC    时间: 2014-1-8 08:37

回复 6# wokong


    你是说4楼、5楼不是人吗?
作者: wokong    时间: 2014-1-24 14:59

8楼不要断章取义,挑拨离间,感谢大家的回答.




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