找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31446|回复: 10

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

[复制链接]
发表于 2013-8-8 23:45:45 | 显示全部楼层 |阅读模式
如21113210,第1位和第6位有0,1,2三个数可选,第5位可选3,4,其他位可以选0,1。只找到多位二进制数的遍历方法,帖子在这里,谢谢各位。
http://www.bathome.net/archiver/tid-13140.html
发表于 2013-8-9 00:33:08 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2013-8-9 05:49:33 | 显示全部楼层
本帖最后由 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]$"
复制代码
发表于 2013-8-9 09:06:57 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2013-8-9 11:57:45 | 显示全部楼层
回复 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技术 +1 收起 理由
CrLf + 1 感谢指正!

查看全部评分

 楼主| 发表于 2013-8-9 13:40:01 | 显示全部楼层
感谢各位,非常精彩,命令行输出都很好,是576个全排列结果没错。
再问一句如果加入>List.txt应该怎么做?
发表于 2013-8-9 13:48:28 | 显示全部楼层
回复 5# terse


    错了一位,已修改,感谢指正!
发表于 2013-8-9 14:44:26 | 显示全部楼层
本帖最后由 523066680 于 2013-8-9 15:05 编辑

回复 7# CrLf

1.228个结果 2.有重复项

没修改到吧,拿terse的贴上去就OK了
发表于 2013-8-9 15:01:43 | 显示全部楼层
再加一个循环
  1. set /a all=3*2*2*2*2*3*2*2
复制代码
发表于 2013-8-9 15:02:39 | 显示全部楼层
回复 6# vcaqua

以下是一个可选方式:

    开头先type nul>list.txt
    找到有echo 的句子加 >>list.txt
 楼主| 发表于 2013-8-9 15:18:40 | 显示全部楼层
谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 17:05 , Processed in 0.023105 second(s), 10 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表