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

to 15楼

set ram=%random%%random%%random%&set "str="
此ram难道一定就超过11位?

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

第一题:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (abdefg kmli socsd pdxy nq ABDEFG KMLI SOCSD PDXY NQ) do set /a n+=1&set !n!=%%a
  3. for /l %%b in (1 1 10) do (
  4.     for /l %%i in (1 1 10) do (
  5.         set /a num=!random!%%10+1
  6.             for %%j in (!num!) do set /p=!%%j!<nul
  7. )
  8. echo\
  9. )
  10. pause>nul
复制代码
(*^_^*)

TOP

第一题

  1. echo off
  2. :cc
  3. set ee=
  4. setlocal enabledelayedexpansion
  5. set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"
  6. set num=0
  7. :aa
  8. set /a num+=1
  9. set /a c=%random%%%10+0
  10. for /f "tokens=1-10 delims= " %%0 in ("%var%") do set "ff=%%%c%"
  11. if !num!==11 goto dd
  12. set "ee=!ee!!ff!"
  13. goto aa
  14. :dd
  15. set /a nm+=1
  16. echo !ee!>>a.txt
  17. if !nm!==10 goto mm
  18. goto cc
  19. :mm
  20. pause
复制代码
学海无涯

TOP

回复 52楼 的帖子

楼上是否对自己的代码测试过?
(*^_^*)

TOP

楼上直接指点吧

我新手,写代码难免有问题的,你是感觉我哪些地方用的不对吗?
学海无涯

TOP

第二题

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (b.txt) do set "d=%%i" & call :treat
  4. pause>nul
  5. :treat
  6. set m=0
  7. set "y="
  8. :cc
  9. set "e=!d:~%m%,6!"
  10. set "x=!d:~%m%,1!"
  11. set /a m+=1
  12. if "!e!"=="ABDEFG" set /a m-=1 & call set "y=%%d:!d:~%m%,6!=bathome%%" & set /a m+=1
  13. if "!x!"=="" goto dd
  14. goto cc
  15. :dd
  16. if "!y!"=="" (echo !d!>>bb.txt) else echo !y!>>bb.txt
  17. goto :eof
复制代码
学海无涯

TOP

关于echo %com%的问题

http://bbs.bathome.net/viewthrea ... amp;page=1#pid29527
当我还是个新手的时候就测试过这个问题了,尽管现在我还是新手,可惜当时就一个人指点明白了我当时的疑惑

作为直接取值如echo %%1 %%2 %%3必须是双%

但是作为变量赋值后的调用,赋值必须是单%

还有一个问题是echo %com% 的双%,尽管开启了变量延迟setlocal enabledelayedexpansion,但是我测试发现echo !com!这样的方式是错误的,只能echo %com%,至于为什么还有待高手指点
学海无涯

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (abdefg kmli socsd pdxy nq ABDEFG KMLI SOCSD PDXY NQ) do (
  3.     set/a n+=1&set _!n!=%%i
  4. )
  5. (for /l %%a in (1,1,10) do (
  6.     for /l %%b in (1,1,10) do (
  7.         set/a num=!random!%%10+1
  8.         for %%c in (_!num!) do set/p=!%%c!<nul
  9.     )
  10.     echo/
  11. ))>a.txt
  12. (for /f "delims=" %%a in (a.txt) do (
  13.     set str=%%a&set var=!str:abdefg= abdefg !&set "cut="
  14.     for %%b in (!var!) do (
  15.         if /i "%%b" neq "abdefg" (
  16.             set/p=%%b<nul
  17.         ) else (
  18.             if defined cut call,set str=%%str:*!cut!=%%
  19.             if "!str:~,6!" equ "ABDEFG" (set/p=bathome<nul) else (set/p=%%b<nul)
  20.         )
  21.         set cut=%%b
  22.     )
  23.     echo/
  24. ))>b.txt
复制代码

TOP

回复 54楼 的帖子

显示结果正确,代码中有些细节须注意,我给你的代码稍作改动,你可以跟你的52楼代码做一比较:
  1. @echo off&setlocal enabledelayedexpansion
  2. :cc
  3. set ee=
  4. set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"
  5. set num=0
  6. :aa
  7. set /a num+=1
  8. set /a c=%random%%%10
  9. for /f "tokens=1-10" %%0 in ("%var%") do set "ff=%%%c%"
  10. if %num%==11 goto dd
  11. set "ee=!ee!!ff!"
  12. goto aa
  13. :dd
  14. set /a nm+=1
  15. echo %ee%>>a.txt
  16. if %nm%==10 goto mm
  17. goto cc
  18. :mm
  19. start a.txt
  20. pause
复制代码


你55楼的代码结果不对吧

[ 本帖最后由 keen 于 2009-6-15 12:46 编辑 ]
(*^_^*)

TOP

回复 58楼 的帖子

感谢指正!为什么要省去"delims= "这个呢?恩,还有个概念我有些模糊,就是开启延迟的时候,如何区分用!!还是%%

55楼的我测试的时候,是指定的b.txt    最后生成的是bb.txt    ,应该改成a.txt  生成 b.txt就对了

我是新手还望能多多指点
学海无涯

TOP

回复 59楼 的帖子

省去"delims= "是因为默认就是以空格为分割符,所以为了缩小代码量,在单独以空格为分隔符可以省略!

开启延迟的时候,到底改用!!还是%%,请参看http://www.bathome.net/viewthrea ... 4%C1%BF%D1%D3%B3%D9

55楼的代码结果,你应该再仔细对照查看替换前和替换后的文本内容,是否只是替换了ABDEFG。
(*^_^*)

TOP

回复 60楼 的帖子

当时测试是没问题的,今天才发现最后重复了最后一行,现在想了半天了,也没想明白原因,我再想想
学海无涯

TOP

给我的感觉好像for在处理文本的时候总是预读一行,到最后一行它仍然预读下一行,结果下一行是空的,它就终止,可是我这个代码到最后那个if仍然满足条件结果就又重新指定了一遍了,是不是这个原因?
学海无涯

TOP

重写了个思路,为什么会出空格?

请大家给看看,指点一下
  1. @echo off
  2. del b.txt
  3. setlocal enabledelayedexpansion
  4. set var=bathome
  5. for /f "delims=" %%i in (a.txt) do set "d=%%i" & call :treat
  6. pause>nul & goto :eof
  7. :treat
  8. set m=0
  9. :cc
  10. set "f=!d:~%m%,1!"
  11. set "e=!d:~%m%,6!"
  12. if "%f%"=="" echo.>>b.txt & goto :eof
  13. if "%e%"=="ABDEFG" (set/p=%var%<nul>>b.txt & set /a m+=5) else (set/p=%f%<nul>>b.txt)
  14. set /a m+=1
  15. goto cc
复制代码


已经找到原因了,这样就好了 set/p=%var%<nul>>b.txt& set  /a m+=5
但是不明白为什么要把set/p=%var%<nul>>b.txt&这个&前面的空格去了才是对了,我以前总以为什么空开就是对的。。。。
学海无涯

TOP

返回列表