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

[文件操作] 求助批处理文件组合的问题

鄙人在此诚心求教各位大师高手们,现有一个问题,一个文件夹下都是文本文档,比如说是9个文本,我想把这9个文件按照每7个组合一起放到一个单独的001,002,003……036文件夹中,通过排列组合的方式我求得应该是共有36个组合,现在能不能通过批处理的方式把这个功能实现呢?恳请各位大师想想办法!

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  5.     set /a n+=1
  6.     set "_!n!=%%a"
  7. )
  8. set FolderCount=1000
  9. set "var=1 2 3 4 5 6 7 8 9"
  10. for %%a in (!var!) do (
  11.     set var1=!var:%%a=!
  12.     for %%b in (!var1!) do (
  13.         set var2=!var1:%%b=!
  14.         for %%c in (!var2!) do (
  15.             set var3=!var2:%%c=!
  16.             for %%d in (!var3!) do (
  17.                 set var4=!var3:%%d=!
  18.                 for %%e in (!var4!) do (
  19.                     set var5=!var4:%%e=!
  20.                     for %%f in (!var5!) do (
  21.                         set var6=!var5:%%f=!
  22.                         for %%g in (!var6!) do (
  23.                             if %%a lss %%b (
  24.                             if %%b lss %%c (
  25.                             if %%c lss %%d (
  26.                             if %%d lss %%e (
  27.                             if %%e lss %%f (
  28.                             if %%f lss %%g (
  29.                                 set /a FolderCount+=1
  30.                                 set FolderName=!FolderCount:~-3!
  31.                                 echo 创建文件夹:!FolderName!
  32.                                 if not exist !FolderName! (
  33.                                     md !FolderName!
  34.                                 )
  35.                                 echo 复制文件:!_%%a! !_%%b! !_%%c! !_%%d! !_%%e! !_%%f! !_%%g!
  36.                                 for %%z in ("!_%%a!" "!_%%b!" "!_%%c!" "!_%%d!" "!_%%e!" "!_%%f!" "!_%%g!") do (
  37.                                     copy /y "%%z" !FolderName!\
  38.                                 )
  39.                                 echo 正在计算下一个组合...
  40.                             ))))))
  41.                         )
  42.                     )
  43.                 )
  44.             )
  45.         )
  46.     )
  47. )
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    谢谢管理,您辛苦了!好人好报

TOP

  1. 0<1/*,:
  2. @echo off
  3. REM 功能:将目录下的文件按指定数量组合并拷贝到目标目录
  4. REM 设置文件搜索目录路径
  5. set srcdir="e:\test\new folder"
  6. REM 设置输出文件所在目录路径
  7. set dstdir="e:\test\new folder\new"
  8. REM 设置文件组合的数量
  9. set count=7
  10. cscript -nologo -e:jscript %0 /srcdir:%srcdir% /dstdir:%dstdir% /count:%count%
  11. pause
  12. exit /b
  13. */
  14. ;
  15. var fso = new ActiveXObject('Scripting.FileSystemObject');
  16. var srcdir = WScript.Arguments.Named('srcdir');
  17. var dstdir = WScript.Arguments.Named('dstdir');
  18. var count = parseInt(WScript.Arguments.Named('count'));
  19. if (isNaN(count)) {
  20.   showError('count 不是数字');
  21.   WScript.Quit(1);
  22. }
  23. try {
  24.   var folder = fso.getFolder(srcdir);
  25. } catch (e) {
  26.   showError(srcdir + ' 不存在');
  27.   WScript.Quit(2);
  28. }
  29. if (!fso.FolderExists(dstdir)) {
  30.   try {
  31.     fso.CreateFolder(dstdir);
  32.   } catch (e) {
  33.     showError('无法创建目录:' + dstdir);
  34.     WScript.Quit(3);
  35.   }
  36. }
  37. for (var arrFiles = [], colFiles = new Enumerator(folder.Files); !colFiles.atEnd(); colFiles.moveNext()) {
  38.   arrFiles.push(colFiles.item());
  39. }
  40. for (var arrComb = combination(arrFiles, count), i = 0, l = arrComb.length; i < l; i++) {
  41.   try {
  42.     var currdir = fso.BuildPath(dstdir, String(i + 1));
  43.     if (!fso.FolderExists(currdir)) {
  44.       fso.CreateFolder(currdir);
  45.     }
  46.     var arrCombMember = arrComb[i];
  47.     for (var j = arrCombMember.length - 1; j >= 0; j--) {
  48.       arrCombMember[j].Copy(currdir + '\\', true);
  49.       WScript.Echo(arrCombMember[j].Path + ' >> ' + currdir);
  50.     }
  51.   } catch (e) {
  52.     WScript.Echo('Error:' + currdir);
  53.   }
  54. }
  55. function combination(arr, n) {
  56.   var arrA = [];
  57.   if (0 === n) return [
  58.     []
  59.   ];
  60.   if (n >= arr.length) {
  61.     arrA.push(arr);
  62.     return arrA;
  63.   }
  64.   for (var i = 0, k = arr.length - n + 1; i < k; i++) {
  65.     for (var j = 0, t = combination(arr.slice(i + 1), n - 1), l = t.length; j < l; j++) {
  66.       t[j].unshift(arr[i]);
  67.       arrA.push(t[j]);
  68.     }
  69.   }
  70.   return arrA;
  71. }
  72. function showError(err, source) {
  73.   WScript.Echo('[object Error]' === Object.prototype.toString.call(err) ? [
  74.       err.name,
  75.       'source: ' + (undefined === source ? '' : source),
  76.       'number: ' + (err.number >>> 0).toString(16),
  77.       'equipment: ' + (err.number >> 16 & 0x1FFF),
  78.       'code: ' + (err.number & 0xFFFF),
  79.       'Information: ' + err.message
  80.     ].join('\n') :
  81.     err);
  82. }
复制代码
微信:flashercs
QQ:49908356

TOP

不通用
  1. @echo off&setlocal enabledelayedexpansion
  2. set "m=7"
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  4.     set /a n+=1
  5.     set _!n!=%%a&set "#!n!=!n!"
  6.     if !n! leq !m! (set s=1!s!)else set "s=!s!0"
  7. )
  8. set/a r=n-m,i=j=1
  9. for /l %%i in (1,1,%r%) do set /a "i*=(n-%%i+1),j*=%%i"
  10. set s=0!s!&set /a "i=i/j+10000"
  11. for /l %%i in (10001 1 !i!) do (
  12.      set f=%%i&set "$="
  13.      md "!f:~-3!" 2>nul
  14.      for /l %%j in (1 1 !n!) do if "!s:~%%j,1!" == "1" set $=!$! !#%%j!
  15.      for /f %%j in ("!s:10= !") do set "j=%%j"
  16.      set s=0!j:0=!!j:1=!1!s:*10=!
  17.      for %%j in (!$!) do copy "!_%%j!" "!f:~-3!"
  18. )
  19. pause
复制代码

TOP

返回列表