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

回复 3楼 的帖子

看你一楼的结果看晕了…… 为什么是两个bc....

组合
  1. @echo off
  2. call :func "abc" ""
  3. pause &exit
  4. :func
  5. setlocal
  6. if %1=="" (
  7.     if not %2=="" (echo %2)
  8.     goto :eof
  9. )
  10. set strnow=%~1
  11.    call :func "%strnow:~1%" "%~2%strnow:~0,1%"
  12.    call :func "%strnow:~1%" "%~2"
  13. endlocal
复制代码

TOP

回复 8楼 的帖子

=。= 上班ing ..偷偷折腾。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :func "abc" ""
  4. pause &exit
  5. :func
  6. setlocal
  7. set tmpstr=%~2
  8. if %1=="" (
  9.    if not %2=="" (
  10.       if not "!tmpstr:~1!"=="" (echo ^<title^>!tmpstr!^</title^>)
  11.    )
  12.    goto :eof
  13. )
  14. set strnow=%~1
  15.    call :func "%strnow:~1%" "%~2%strnow:~0,1%"
  16.    call :func "%strnow:~1%" "%~2"
  17. endlocal
复制代码

TOP

那个时候做组合,绕弯路的
根据楼主的情况,组合中只有一位字母的不进行显示。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :func "abc" "" 0
  4. pause &exit
  5. :func
  6. set tmpstr=%~2
  7. if not "!tmpstr!"=="" (
  8.   if not "!tmpstr:~1!"=="" (echo ^<title^>!tmpstr!^<\title^>)
  9. )
  10. if %1=="" (goto :eof)
  11. setlocal
  12.   set strnow=%~1
  13.   set /a lp=0,lpb=lp+1
  14.   :lp
  15.     call :func "!strnow:~%lpb%!" "%~2!strnow:~%lp%,1!"
  16.   if not "!strnow:~%lpb%!"=="" (
  17.     set /a lp+=1,lpb=lp+1
  18.     goto :lp
  19.   )
  20. endlocal
复制代码

[ 本帖最后由 523066680 于 2010-7-5 11:05 编辑 ]

TOP

按照LZ的情况,字母不多,N层for最方便,速度也快, 组合这个东西
就是每个元素存在与不存在的情况,分别组合起来的结果。
依然根据要求,中间加了判断,若结果是一个字符的就不显示了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in ("a" "") do (
  4. for %%b in ("b" "") do (
  5.   for %%c in ("c" "") do (
  6.      set str=%%~a%%~b%%~c
  7.      if not "!str!"=="" (
  8.        if not "!str:~1!"=="" (
  9.            echo ^<title^>!str!^</title^>
  10.        )
  11.      )
  12.   )
  13. )
  14. )
  15. pause
复制代码

TOP

回复 12楼 的帖子

我重新看了一下,目标是:
元素 存在.1 .2 .3 中    并且变量n记录了个数。

然后 获得这三个元素的所有组合,作为随机的标题
对于指定目录中的所有html文件,
给予一个随机的 <title> 对吗?

TOP

主要考虑到代码结构上的不同
我没按你的 .1 .2  .3 这样固定元素
而是从开头  set element=a b c
组合的时候如果元素只有一个,会跳过。
  1. @echo off &setlocal enabledelayedexpansion
  2. set element=a b c
  3. ::构造for语句...
  4. for %%x in (%element%) do (
  5.   set "fo=for %%%%x in ("%%x" "") do (!fo!"
  6.   set end="!end!)"
  7.   set result=!result!%%~%%x
  8. )
  9. set n=0
  10. ::把for语句拿出来用了。中间的判断筛选需要的组合
  11. %fo%
  12.   set nowstr=%result%
  13.   if not "!nowstr!"=="" (
  14.      if not "!nowstr:~1!"=="" (
  15.          set /a n+=1
  16.          set item_!n!=^<title^>!nowstr!^</title^>
  17.          echo 筛选出的组合:!nowstr!
  18.      )
  19.   )
  20. %end:"=%
  21. ::随机获取那些组合
  22. cd /d "C:\Documents and Settings\Administrator\桌面\新建文件夹"
  23. for /f "delims=" %%a in ('dir /a-d/b *.html') do (
  24.   set /a rand=!random!%%n+1
  25.   for %%x in (!rand!) do (
  26.     echo 指向的文件: %%a , 选择的标题!item_%%x!
  27.     (
  28.       echo !item_%%x!
  29.       type "%%a"
  30.      )>"%%a"
  31.   )
  32. )
  33. pause
  34. exit
复制代码
哼哼!用了某个特性, 这个代码的路线基本只有批处理能走……

[ 本帖最后由 523066680 于 2010-7-7 13:23 编辑 ]

TOP

回复 16楼 的帖子

set ".1=a"
set ".2=b"
set ".3=c"
set n=3

我的主要是针对字符串的。 在调用函数的那句 call  :func "你是谁" ""  (测试中文额。。。)
如果你一定要我 .1 .2 .3 那么我必须另写一段代码, 判断n=3 然后将.1.2.3 结合起来然后
调用。这对我的代码路线来说就是一个弯路呐。
所以我决定不写这个部分了,而且楼主自己也有能力自己改上的。

文件操作部分按照你的意思,
现在我直接复制你的代码,直接在上面修改了。

组合的代码也改了,速度是慢些,不过调用一次关系不大。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a strn=0
  4. call :func "你是谁" ""
  5. echo 筛选出的组合个数%strn%
  6. ::开始文件操作
  7. cd /d "C:\Documents and Settings\Administrator\桌面\新建文件夹"
  8. for /f "delims=" %%a in ('dir /a-d/b *.html') do (
  9.   set file=%%a
  10.   setlocal enabledelayedexpansion
  11.   set /a n=!random!%%strn+1
  12.   for %%x in (!n!) do echo; !str_%%x! - %%a
  13.   (
  14.     for %%x in (!n!) do echo;!str_%%a!
  15.     more "!file!"
  16.   )> "%temp%\~tmp"
  17.   move "%temp%\~tmp" "!file!"
  18.   endlocal
  19. )
  20. pause &exit
  21. :func
  22. set tmpstr=%~2
  23. if %1=="" (
  24.    if not %2=="" (
  25.       if not "!tmpstr:~1!"=="" (
  26.            set /a strn+=1
  27.            echo 筛选的组合 !tmpstr!
  28.            set "str_!strn!=^<title^>!tmpstr!^</title^>"
  29.       )
  30.    )
  31.    goto :eof
  32. )
  33. set strnow=%~1
  34. call :func "%strnow:~1%" "%~2%strnow:~0,1%"
  35. set strnow=%~1
  36. call :func "%strnow:~1%" "%~2"
  37. goto :eof
复制代码




恩我交代一下:
set /a strn=0
call :func "元素" ""
调用 func函数, 第二参数为空。
调用之后,函数会把组合的结果  储存到 str_1 ,str_2 , str_3...这样的变量中
最后 strn会等于组合结果的个数。(显然是筛选过的,只有一个字符的组合去掉)

然后就可以自己改了吧。

[ 本帖最后由 523066680 于 2010-7-7 17:43 编辑 ]

TOP

我了个去,赶紧闪…… 我什么也不知道我什么也不知道……


哦 ,我还是说一下,你可以用 a代表  腾讯网    b代表中华网  c代表搜狐网

然后 abc排了以后,你把  a b c从字符的角度分别替换成他们对应的网,就可以了吧...

最后重申:我什么也不知道我什么也不知道……

TOP

=。=
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a strn=0
  4. set item_a=搜狐网
  5. set item_b=新浪网
  6. set item_c=腾讯网
  7. set item_d=中华网
  8. ::现在调用函数,组合abcd字符,一个字母的掠过
  9. call :func "abcd" ""
  10. echo 筛选出的组合个数%strn%
  11. ::开始文件操作
  12. cd /d "C:\Documents and Settings\Administrator\桌面\新建文件夹"
  13. for /f "delims=" %%a in ('dir /a-d/b *.html') do (
  14.   set file=%%a
  15.   setlocal enabledelayedexpansion
  16.   set /a n=!random!%%strn+1
  17.   for %%x in (!n!) do (echo; !str_%%x! - %%a)
  18.   (
  19.     for %%y in (!n!) do echo;!str_%%y!
  20.     type "!file!"
  21.   )> "%temp%\~tmp"
  22.   move "%temp%\~tmp" "!file!"
  23.   endlocal
  24. )
  25. pause &exit
  26. :func
  27. set tmpstr=%~2
  28. if %1=="" (
  29.    if not %2=="" (
  30.       if not "!tmpstr:~2!"=="" (
  31.            set /a strn+=1
  32.            set "tmpstr2="
  33.            for %%i in (!tmpstr!) do (set tmpstr2=!tmpstr2!!item_%%i!)
  34.            echo 筛选的组合 !tmpstr2!
  35.            set "str_!strn!=^<title^>!tmpstr2!^</title^>"
  36.       )
  37.    )
  38.    goto :eof
  39. )
  40. set strnow=%~1
  41. call :func "%strnow:~1%" "%~2 %strnow:~0,1%"
  42. set strnow=%~1
  43. call :func "%strnow:~1%" "%~2"
  44. goto :eof
复制代码

[ 本帖最后由 523066680 于 2010-7-16 09:45 编辑 ]

TOP

返回列表