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

  1. @echo off&setlocal enabledelayedexpansion
  2. set replace=bathome
  3. for /f "delims=" %%a in (a.txt) do set n=0&set "st="&call :sub %%a
  4. pause>nul&goto :eof
  5. :sub
  6. set str0=%1&set str1=!str0:~%n%,6!
  7. if "!str1!"=="ABDEFG" (set st=!st!!replace!&set/a n+=6) else (set st=!st!!str0:~%n%,1!&set/a n+=1)
  8. if not "!str1!"=="" (goto sub)
  9. echo !st!
  10. goto :eof
复制代码
1

评分人数

TOP

第一小题:
思路,用数字作为变量对应字串。将随机数转化为数字变量替换后输出随机字串。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"
  3. set n=0
  4. for %%i in (%var%) do (set !n!=%%i&set/a n+=1)
  5. :begin
  6. set ram=%random%%random%%random%&set "str="
  7. for /l %%a in (1,1,10) do (set "str=!str! !ram:~%%a,1! ")
  8. set out=%str: =!!%
  9. echo !out!>>b.txt
  10. set/a n-=1&if !n! gtr 0 (goto :begin)
  11. start b.txt
复制代码

[ 本帖最后由 inittab 于 2009-4-23 07:35 编辑 ]
1

评分人数

    • 随风: 奇妙的替换!PB + 11

TOP

原帖由 随风 于 2009-4-23 06:20 发表
牛!
set out=%str: =!!% 好晦涩的写法 不仅使我想起了 %var:*"=set "var=%
它们是兄弟吧 ^_^
百思不得其解 set out=%str: =!!% 这句是如何替换的?能讲解下吗?
你好像少写了个空格 (set "str=!str! !ram:~%%a ...


多谢指出。没注意的确少了个空格,
set out=%str: =!!% 这句是把数字变为变量。
如1 2 3 4 5 6替换为!!1!!2!!3!!4!!5!! 前边已把定义过1~0 为变量为10个字串了,所以输出就是它们的随机组合

学批处理还不到一月,还有很多东西要向各位老大学习

TOP

netbenton兄的代码真是出神入化呀。在cn-dos 见识过您的功力

TOP

回复 28楼 的帖子

呵呵,多谢支持。
一月前我也还真不明白tokens delims是代表什么意思。刚好手头有一个任务要做。想了很多办法也没弄好。一不小心,百度到了cn-dos 及本坛。刚好坛上有个例子解决我的问题。但是看了各位老大的代码真是云里雾里的。于是我很强烈地想弄明白这些代码到底是怎么回事。学了几个有限的命令之后,越来越感到这些东西不断地在挑战我的脑细胞。
我觉得把自己的思路用p来实现是一件很爽很有成熟感的事情,我还有很多东西要学。
大家一起努力吧

TOP

回复 33楼 的帖子

29 30 楼这两段代码都看得很费力。
第一段觉得1:>a.txt 不要的可以。不清楚有什么用。是类似于type nul>a.txt ?
最后的for %%0 看明白了,是为配合com变量作显示。%com%值经上一步实际是
%%6%%4%%1%%2%%1%%8%%2%%3%%5%%7 所以前边必须用%%0作配合。
变成下边这样了。
for /f "tokens=1-10" %%0 in ("%str%") do (echo.%%6%%4%%1%%2%%1%%8%%2%%3%%5%%7)  思路跟我相近。

30楼的替换测试正常(特殊字符没测试)
ok ‘’两个变量最好初始化一下set "ok="&set "``=", 否则多次运行有变量残留。
思路是用变量层层替换法取出ABDEFG循环替换后输出,

!str:*a=! 此处*的作用很大。我是第一次学习到。
它的作用是只取str 中第一个匹配对象后边的字符。抛弃前边的字符
E:\bat>set aa=abcde
E:\bat>echo %aa:*c=%
de
E:\bat>echo %aa:c=%
abde
高手见笑了。还有个问题,就是如何才可以在最短时间内看明白代码的思路?
去掉@echo off ? 很乱哦。加echo !XX! &pause吗?。有好方法请指点一下。

[ 本帖最后由 inittab 于 2009-4-24 09:28 编辑 ]

TOP

谢谢楼上指出.这是以前写的.我也是新手有考虑不周之处. 其实这句也是多余的.
修正如下
  1. @echo off&setlocal enabledelayedexpansion
  2. set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"
  3. set n=0
  4. for %%i in (%var%) do (set !n!=%%i&set/a n+=1)
  5. :begin
  6. set "str="
  7. for /l %%a in (1,1,10) do set/a ran=!random!%%10&set "str=!str! !ran! "
  8. set out=%str: =!!%
  9. echo !out!>>b.txt
  10. set/a n-=1&if !n! gtr 0 (goto :begin)
  11. start b.txt
复制代码

TOP

返回列表