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

[文本处理] [已解决]请教生成字母加数字能用BAT吗

[复制链接]
发表于 2015-8-29 14:30:37 | 显示全部楼层 |阅读模式
有26个字母{a-Z}和10个数字{0-9}
如果要生成8位字符的,区分大小写,
这样的排列是(26+26+10)8次方=218340105584896个,这218万亿
但相邻不能有两个或以上相同的如{a1b2cc90,这个字符出现了两次cc}
这样的数据可以用PHP来产生吗?
如果生成单个文本数据应该不太可能,得切割成好多份……
这可以用BAT来处理生成多个文本吗
发表于 2015-8-29 17:04:38 | 显示全部楼层
  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript "%~f0"
  4. pause & exit/b
  5. */
  6. var fso = new ActiveXObject("Scripting.FileSystemObject");
  7. var i = j = 0;
  8. var z = '';
  9. var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  10. var arr1 = str.split('');
  11. for (var a=0;a<arr1.length;a++){
  12.     var arr2 = str.replace(arr1[a],'').split('');
  13.     for (var b=0;b<arr2.length;b++){
  14.         var arr3 = str.replace(arr2[b],'').split('');
  15.         for (var c=0;c<arr3.length;c++){
  16.             var arr4 = str.replace(arr3[c],'').split('');
  17.             for (var d=0;d<arr4.length;d++){
  18.                 var arr5 = str.replace(arr4[d],'').split('');
  19.                 for (var e=0;e<arr5.length;e++){
  20.                     var arr6 = str.replace(arr5[e],'').split('');
  21.                     for (var f=0;f<arr6.length;f++){
  22.                         var arr7 = str.replace(arr6[f],'').split('');
  23.                         for (var g=0;g<arr7.length;g++){
  24.                             var arr8 = str.replace(arr7[g],'').split('');
  25.                             for (var h=0;h<arr8.length;h++){
  26.                                 var s = arr1[a]+arr2[b]+arr3[c]+arr4[d]+arr5[e]+arr6[f]+arr7[g]+arr8[h];
  27.                                 i++;
  28.                                 z = z + s + '\r\n';
  29.                                 //每一百万条数据生成一个文本
  30.                                 if (i==1000000){
  31.                                     i = 0;
  32.                                     j++;
  33.                                     fso.CreateTextFile(j+'.txt',2).WriteLine(z);
  34.                                     z = '';
  35.                                 }
  36.                             }
  37.                         }
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.     }
  43. }
复制代码

评分

参与人数 1技术 +1 收起 理由
kkfgef + 1 谢谢

查看全部评分

发表于 2015-8-29 17:32:42 | 显示全部楼层
本帖最后由 CrLf 于 2015-8-29 17:43 编辑

纯批来一发
  1. @echo off&setlocal enabledelayedexpansion
  2. set list=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  3. for /l %%a in (1 1 100) do (
  4.         set "password="
  5.         for /l %%b in (0 1 7) do (
  6.                 set /a "rand=!random!%%(61 + ^!%%b)"
  7.                 for %%z in (!rand!) do (
  8.                         set password=!password!!list:~-%%z,1!
  9.                         set list=!list:~%%z!!list:~,%%z!
  10.                 )
  11.         )
  12.         echo !password!
  13. )
  14. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
kkfgef + 1 谢谢

查看全部评分

发表于 2015-8-29 17:35:56 | 显示全部楼层
哦,好吧,是排列组合不是产生随机字符串
楼主这是要搞彩虹表吗?
 楼主| 发表于 2015-8-31 13:14:54 | 显示全部楼层
回复 2# pcl_test


    非常感谢,可是这个要生成的话,不知我的电脑要开到什么时候了,能不能帮我更改一下生成随机的,比如生成随机一亿条数据(同样每条数据不包括两个相同字符的AA,11,cc……),并每百万一文本,这样也就一百个文件,如果是全部生成那要9亿多M了,电脑放不下……
发表于 2015-8-31 13:25:37 | 显示全部楼层
回复 5# kkfgef

本版规则
1、求助时,务必在顶楼一次性把问题交代清楚,建议给出完整有针对性的样本,样本过大可发网盘分享链接。勿发无意义的标题
2、使用 code 标记把代码部分括起来(单击回复框的 <> 按钮,复制粘贴代码进去),以便复制。问题解决后,请编辑顶楼帖子在标题前面注明[已解决]http://www.bathome.net/thread-3473-1-1.html
3、提问前先使用论坛搜索,相同或类似的问题就无需再发帖了
发表于 2015-8-31 13:38:07 | 显示全部楼层
回复 5# kkfgef


那你就用pcl_test的程序生成100000000的时候退出不就行了吗。
 楼主| 发表于 2015-8-31 14:13:40 | 显示全部楼层
回复 7# 回家路上


    问题他这个不是随机的……而是排列的数据,我想要随机生成。
 楼主| 发表于 2015-8-31 14:15:12 | 显示全部楼层
回复 6# pcl_test


    还是非常感谢你的思路……
发表于 2015-8-31 14:18:33 | 显示全部楼层
本帖最后由 pcl_test 于 2015-8-31 14:22 编辑

回复 9# kkfgef
以后直接发实际问题,不要浪费别人的时间和精力
一种不是很高效的方法
  1. 1>1/* :
  2. @echo off&cscript -nologo -e:jscript "%~f0"&pause & exit/b
  3. */
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var arr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');
  6. var z = '';
  7. var j =n =0;
  8. while (1){
  9.     var s = '';
  10.     for (var i=0;i<8;i++){
  11.         var t = Math.floor(Math.random()*62);
  12.         s = s+arr[t];
  13.     }
  14.     if (!/.*([a-zA-Z\d])\1.*/.test(s)){
  15.         z = z+s+'\r\n';
  16.         j++;
  17.     }
  18.     //每一百万条数据生成一个文本
  19.     if (j==1000000){
  20.         n++;
  21.         fso.CreateTextFile(n+'.txt',2).WriteLine(z);
  22.         j = 0;
  23.         z = '';
  24.     }
  25.     //共生成一百个文本
  26.     if (n==100)break;
  27. }
复制代码
发表于 2015-8-31 17:27:59 | 显示全部楼层
靠靠靠靠,那不就是我在 3 楼理解的意思吗?楼主都不去试代码,我特么还写给你做什么!

---------------------------------------------------------

借 10 楼代码改一下:
  1. 1>1/* :
  2. @echo off&cscript -nologo -e:jscript "%~f0"&pause & exit/b
  3. */
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var arr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');
  6. var j = n = i =0;
  7. var z = s = c = '';

  8. //共生成一百个文本
  9. for(n=1;n<=100;n++){
  10.         z = '';

  11.         //每一百万条数据生成一个文本
  12.         for(j=10000;j--;){
  13.                 s = '';

  14.                 for (var i=0;i<8;i++){
  15.                         var t = Math.floor(Math.random() * (61+!i));
  16.                         arr.push(c = arr.splice(t,1)[0]);
  17.                         s+=c;
  18.                 }

  19.                 z+=s+'\r\n';
  20.         }

  21.         fso.CreateTextFile(n+'.txt',2).WriteLine(z);
  22. }
复制代码
发表于 2015-9-1 09:27:07 | 显示全部楼层
也来一个
  1. @if(0)==(0) echo off
  2. cscript -NoLogo -E:JScript %0
  3. pause & exit /b @end
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var arr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');
  6. var i = 10000;
  7. while (i--) {
  8. var j = 10000,s = '';
  9.     while (j--) {
  10.         s+=arr.sort(function(){ return 0.5 - Math.random()}).join("");
  11.     }
  12.     fso.CreateTextFile(i+'.txt',2).Write(s.match(/\w{8}/g).join('\r\n'));
  13. }
复制代码

评分

参与人数 1技术 +1 收起 理由
kkfgef + 1 谢谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 18:23 , Processed in 0.020281 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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