Board logo

标题: 求助批处理生成不重复的3位字符 [打印本页]

作者: newgain    时间: 2023-9-6 02:04     标题: 求助批处理生成不重复的3位字符

求助生成不重复的1-4位字符(大小写字母、数字),并输出TXT文件;
文件可能会比较大,最好位数可调。win10系统。
感谢10元。
作者: Nsqs    时间: 2023-9-6 02:48

  1. powershell -noprofile -executionpolicy bypass "1..100|%%{((97..122),(65..90),(48..57)|%%{[char[]]$_}|Get-Random -Count 4) -join ''}" > rnd.txt
复制代码
生成100个随机字符,每行一组
作者: wanghan519    时间: 2023-9-6 05:27

本帖最后由 wanghan519 于 2023-9-6 05:30 编辑

awk写了个幂集,不知道对不对,可以存入文件a.awk再运行echo asdfg | awk -f a.awk试一下
只考虑了组合,没考虑排列。。。
  1. function powerset(x, y) {
  2.     if (length(x) > 3 || y > length($0)) {
  3.         print x
  4.         return
  5.     }
  6.     powerset(x, y + 1)
  7.     powerset(x substr($0, y, 1), y + 1)
  8. }
  9. {
  10.     powerset("", 1)
  11. }
复制代码

作者: zaqmlp    时间: 2023-9-6 14:30

  1. /*&cls&echo off&cd /d "%~dp0"
  2. set "length=3"
  3. set "count=100"
  4. cscript -nologo -e:jscript "%~f0" "%length%" "%count%" > "out.txt"
  5. pause
  6. exit
  7. */
  8. var len=WSH.Arguments(0).split(/[-,~]/),count=Number(WSH.Arguments(1));
  9. var charlist=[
  10.     ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],
  11.     ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],
  12.     ["0","1","2","3","4","5","6","7","8","9"]
  13. ];
  14. var r1=Number(len[0]);
  15. function getrandom(){
  16.     if(len.length==2){r1=Math.floor(Math.random()*(Number(len[1])-Number(len[0]))+Number(len[0]));}
  17.     var s=[];
  18.     for(var i=1;i<=r1;i++){
  19.         var r2=Math.floor(Math.random()*charlist.length);
  20.         var r3=Math.floor(Math.random()*charlist[r2].length);
  21.         s.push(charlist[r2][r3]);
  22.     }
  23.     return s.join("");
  24. }
  25. var dic={},n=0;
  26. for(;;){
  27.     var rs=getrandom();
  28.     if(dic[rs]==undefined){
  29.         WSH.echo(rs);
  30.         n=n+1;dic[rs]='';
  31.         if(n>=count){break;}
  32.     }
  33. }
复制代码

作者: newgain    时间: 2023-9-6 21:10

回复 4# zaqmlp

E:\DESK\输出.bat(10, 3) Microsoft JScript 编译错误: 缺少 ']'
作者: zaqmlp    时间: 2023-9-6 21:43

回复 5# newgain

核对代码,确保复制完整
作者: newgain    时间: 2023-9-7 00:09

回复 6# zaqmlp


   
作者: zaqmlp    时间: 2023-9-7 00:40

回复 5# newgain

不要手动选中复制,直接点击帖子自带的复制按钮
    https://pan.baidu.com/s/1SIKi0VaD3Tlo9R3HJO0vcA?pwd=4t45
作者: newgain    时间: 2023-9-7 07:25

回复 8# zaqmlp

只输出100多个,这个数量不全
作者: newgain    时间: 2023-9-7 07:26

回复 8# zaqmlp


    可以输出所有的么1~4位组合么
作者: wanghan519    时间: 2023-9-7 09:14

本帖最后由 wanghan519 于 2023-9-7 09:29 编辑

python最简单,因为有itertools,
  1. import itertools
  2. s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
  3. with open(r'a.txt','w') as f:
  4.     for i in range(1, 5):
  5.         for j in itertools.permutations(s, i):
  6.             f.write(''.join(j)+'\n')
复制代码
前两天刚提过的nushell可以方便的写sql,似乎sql写递归也很方便
  1. with recursive c as (
  2. select x, 1 n from t
  3. union all
  4. select c.x || t.x, c.n + 1
  5. from c join t
  6. where c.n < 4 and c.x not like '%' || t.x || '%'
  7. )
  8. select x from c;
复制代码
或者就像上面那样再试试awk递归怎么写,上面那是列出所有组合,没考虑全排列
作者: qixiaobin0715    时间: 2023-9-7 09:28

本帖最后由 qixiaobin0715 于 2023-9-7 09:54 编辑
  1. @echo off
  2. set str1=0 1 2 3 4 5 6 7 8 9
  3. set str2=a b c d e f g h i j k l m n o p q r s t u v w x y z
  4. set str3=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  5. set str=%str1% %str2% %str3%
  6. (for %%i in (%str%) do (
  7.     echo,%%i
  8.     for %%j in (%str%) do (
  9.         echo,%%i%%j
  10.         for %%k in (%str%) do (
  11.             echo,%%i%%j%%k
  12.             for %%l in (%str%) do (
  13.                 echo,%%i%%j%%k%%l
  14.             )
  15.         )
  16.     )
  17. ))>1.txt
  18. pause
复制代码

作者: qixiaobin0715    时间: 2023-9-7 09:56

回复 1# newgain
12楼代码发上来有笔误,现已修改。
作者: zaqmlp    时间: 2023-9-7 13:57

回复 10# newgain
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&set "current=%cd%"
  3. path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
  4. echo;waiting...
  5. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
  6. echo;done
  7. pause
  8. exit
  9. #>
  10. $current=($env:current).trimend('\');
  11. $outfile=$current+'\out.txt';
  12. $fs=New-Object System.IO.FileStream($outfile, [System.IO.FileMode]::Create);
  13. $sw=New-Object System.IO.StreamWriter($fs, [Text.Encoding]::GetEncoding('GB2312'));
  14. $arr=New-Object -TypeName System.Collections.ArrayList;
  15. $charlist=@(97..122)+@(65..90)+@(48..57);
  16. for($i=1;$i -le 4;$i++){
  17.     $brr=New-Object -TypeName System.Collections.ArrayList;
  18.     if($arr.count -eq 0){
  19.         for($j=0;$j -lt $charlist.length;$j++){
  20.             $c=([char]$charlist[$j]).toString();
  21.             $sw.WriteLine($c);
  22.             [void]$brr.add($c);
  23.         }
  24.     }else{
  25.         for($j=0;$j -lt $arr.count;$j++){
  26.             for($k=0;$k -lt $charlist.length;$k++){
  27.                 $c=([char]$charlist[$k]).toString();
  28.                 $s=$arr[$j]+$c
  29.                 $sw.WriteLine($s);
  30.                 [void]$brr.add($s);
  31.             }
  32.         }
  33.     }
  34.     $sw.Flush();
  35.     $arr=$brr;
  36. }
  37. $sw.Close();
  38. $fs.Close();
复制代码

作者: Nsqs    时间: 2023-9-7 14:39

我大PowerShell没资格参与这问题?
作者: newgain    时间: 2023-9-9 08:22

回复 14# zaqmlp


    找不到输出的文件在哪
作者: newgain    时间: 2023-9-9 08:23

回复 13# qixiaobin0715

谢谢,发我一下微信收款码
作者: qixiaobin0715    时间: 2023-9-9 08:57

回复 17# newgain
不麻烦了,算是免费赠送好了。
作者: zaqmlp    时间: 2023-9-9 11:36

回复 16# newgain
out.txt
代码里有写,你不会看一下?或者放到一个空文件夹里运行




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2