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

[文件操作] 批处理如何按指定规则给多个文件的文件名末尾添加指定位数的随机大写字母?

本帖最后由 pcl_test 于 2016-7-5 13:30 编辑

难题!求批处理实现一万多个文件所有文件添加5位随机大写字母,且还要确保每7个文件中,要有且只有随机1个文件的末尾最后一个子母为DKRX四个字母其中的一个。

我这里有一个批处理命令,只是实现了所有文件添加5位随机大写字母。但是要控制确保每7个文件中,要有且只有随机1个文件的末尾最后一个子母为DKRX四个字母其中的一个,这个我不知道如何做,请大神指点。
http://www.bathome.net/redirect. ... 5635&ptid=34960

所谓确保每7个文件中,要有且只有随机1个文件的末尾最后一个子母为DKRX四个字母其中的一个的意思就是说,如下例——
文件批处理后成为        001JFHNE.txt  002HGSBT.txt 003LKEJQ.txt 004ZXSDE.txt 005RFVCD.txt 006WERTY.txt 007ASXCF.txt
                             008QWEDG.txt   009QWEDF.txt 010DEFGT.txt 011QWESL.txt 012ZXCDF.txt 013LRKMK.txt 014SDFGL.txt
                              ...  ...
005RFVCD.txt 就是001-007这七个文件中随机抽取的一个文件 末尾字母为D 其它六个文件末尾字母不能为DKRX四个中的任意一个
013LRKMK.txt 就是008-014这七个文件中随机抽取的一个文件 末尾字母为K 其它六个文件末尾字母不能为DKRX四个中的任意一个
就是这个意思了…… 很难吧……如果您一定要问为什么这个要求这么奇葩,我只能说是工作需要了……DKRX这四个字母有特别的含义,它是作为这一万多个文件中每七个文件抽取其中一个带上一个作为暗码的(嘿嘿,有点间谍特工的意思)
1

评分人数

本帖最后由 WHY 于 2016-7-6 01:17 编辑

powershell 可以这样:
  1. $arr = dir *.txt | ?{$_ -is [IO.FileInfo]}  #### 遍历当前目录下的txt文件
  2. $num = 7                                    #### 每7个文件一组
  3. $chr = 'ABCEFGHIJLMNOPQSTUVWYZDKRX'.ToCharArray()
  4. $i = 0
  5. while ($arr[$i] -ne $null) {
  6.     $flag = 1
  7.     $arr[$i..($i + $num - 1)] | get-Random -Count $num | %{
  8.         $str = ($chr | get-Random -Count 26) -join(''); $str *= 2;
  9.         if ($flag) {
  10.             $flag = 0
  11.             $str = [regex]::match($str, '....[DKRX]').value
  12.         } else {
  13.             $str = [regex]::match($str, '....[^DKRX]').value
  14.         }
  15.         $newName = $_.Name -replace '(.+)(\..+)$', ('$1' + $str + '$2')
  16.         ren $_ -newName $newName
  17.     }
  18.     $i += $num
  19. }
复制代码
  1. @if (0)==(0) echo off
  2. dir /b *.txt | cscript //nologo //e:jscript "%~0"
  3. pause & exit
  4. @end
  5. var num = 7;  //每7个文件一组
  6. var chr = 'ABCEFGHIJLMNOPQSTUVWYZDKRX'.match(/./g);
  7. var fso = new ActiveXObject('Scripting.FileSystemObject');
  8. var arr = WSH.StdIn.ReadAll().replace(/\r\n$/, '').split('\r\n');
  9. while(arr.length > 0){
  10.     var m = arr.slice(0, num);
  11.     m.sort(function(){return Math.random() - 0.5});
  12.     for (var i=0; i<m.length; i++) {
  13.         var s  = chr.sort(function(){return Math.random() - 0.5}).join(''); s += s;
  14.         if (i==0) {
  15.             s = s.match(/....[DKRX]/);
  16.         } else {
  17.             s = s.match(/....[^DKRX]/);
  18.         }
  19.         fso.GetFile(m[i]).Name = m[i].replace(/(.+)(\..+)$/, '$1' + s + '$2');
  20.     }
  21.     arr.splice(0, num);
  22. }
复制代码

TOP

本帖最后由 pcl_test 于 2016-7-5 22:27 编辑
  1. //&cls&(dir /a-d/b *.txt|findstr /v "[A-Z][A-Z][A-Z][A-Z][A-Z]\.txt$")|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var i=0, s='', n=7;
  3. var str1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
  4. var str2 = 'DKRX'.split('');
  5. var reg = new RegExp(str2.join('|'));
  6. var fso = new ActiveXObject('Scripting.Filesystemobject');
  7. while(!WSH.StdIn.AtEndOfStream){
  8.     if(i==0||i==n){var i=0;var t = Math.floor(Math.random()*n);s+='此组第'+(t+1)+'个为特殊命名\r\n'}
  9.     var file = fso.GetFile(WSH.StdIn.ReadLine());
  10.     var t1 = str1.sort(function(){return Math.random()-.5});
  11.     while(reg.test(t1[4])){var t1 = str1.sort(function(){return Math.random()-.5});}
  12.     var t2 = str2[Math.floor(Math.random()*str2.length)];
  13.     if(i==t){
  14.         s+=(file.name = fso.GetBaseName(file)+t1.join('').substr(0, 4)+t2+'.'+fso.GetExtensionName(file))+'\r\n';
  15.     }else{
  16.         s+=(file.name = fso.GetBaseName(file)+t1.join('').substr(0, 5)+'.'+fso.GetExtensionName(file))+'\r\n';
  17.     }
  18.     i++;  
  19. }
  20. fso.OpenTextFile('处理结果.txt', 2, true).Write(s);
  21. WSH.echo('Done');
复制代码

TOP

返回列表