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

[数值计算] 批处理如何遍历生成8位数全部数值?每位可选数字不同

如21113210,第1位和第6位有0,1,2三个数可选,第5位可选3,4,其他位可以选0,1。只找到多位二进制数的遍历方法,帖子在这里,谢谢各位。
http://www.bathome.net/archiver/tid-13140.html

本帖最后由 CrLf 于 2013-8-9 17:33 编辑

对于排列组合,可以这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a all=3*2*2*2*2*3*2*2
  3. (for /l %%a in (1 1 !all!) do (
  4.    set /a "n=%%a,v=100000000 + n/192%%3*10000000 + n/96%%2*1000000 + n/48%%2*100000 + n/24%%2*10000 + (n/12%%2+3)*1000 + n/4%%3*100 + n/2%%2*10 + n%%2"
  5.    echo !v:~1!
  6. ))>list.txt
  7. pause
复制代码

TOP

本帖最后由 weichenxiehou 于 2013-8-9 12:50 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /l %%a in (100000000 1 121114211) do set n=%%a&echo,!n:~1!)|findstr "^[012][01][01][01][34][012][01][01]$"
复制代码
看得多说得多,远比不上写得多。

TOP

本帖最后由 523066680 于 2013-8-9 09:30 编辑

既然大家都这么精简,那我就写长一点了。
楼主,是全排列不?
理论上应该有 (2^5)*3*3*2 = 576 个结果
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set S5=3 4
  4. set S1=0 1 2
  5. set S6=0 1 2
  6. for /l %%x in (1,1,8) do (
  7.     if defined S%%x (
  8.         set "f%%x=for %%%%x in (!S%%x!) do ("
  9.     ) else (
  10.         set "f%%x=for %%%%x in (0 1) do ("
  11.     )
  12. )
  13. set count=0
  14. %f1%%f2%%f3%%f4%%f5%%f6%%f7%%f8%
  15.     set /a count+=1
  16.     echo %%1%%2%%3%%4%%5%%6%%7%%8
  17. ))))))))
  18. echo 共有%count%个结果
  19. pause
复制代码

TOP

回复 2# CrLf
楼主的意思是这样吧
  1.    set /a "n=%%a,v=100000000 + n/96%%3*10000000 + n/96%%2*1000000 + n/48%%2*100000 + n/24%%2*10000 + (n/12%%2+3)*1000 + n/4%%3*100 + n/2%%2*10 + n%%2"
复制代码
1

评分人数

    • CrLf: 感谢指正!技术 + 1

TOP

感谢各位,非常精彩,命令行输出都很好,是576个全排列结果没错。
再问一句如果加入>List.txt应该怎么做?

TOP

回复 5# terse


    错了一位,已修改,感谢指正!

TOP

本帖最后由 523066680 于 2013-8-9 15:05 编辑

回复 7# CrLf

1.228个结果 2.有重复项

没修改到吧,拿terse的贴上去就OK了

TOP

再加一个循环
  1. set /a all=3*2*2*2*2*3*2*2
复制代码

TOP

回复 6# vcaqua

以下是一个可选方式:

    开头先type nul>list.txt
    找到有echo 的句子加 >>list.txt

TOP

谢谢大家

TOP

返回列表