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

[文件操作] 批处理如何批量将多个文件按指定数量分配到多个文件夹里

[复制链接]
发表于 2012-2-23 11:31:38 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-22 22:45 编辑

规则说明:

  把当前目录里面所有的文件分配在新建立的文件夹内

  自动新建立文件夹,自动筛选18个文件(或更多文件,最好可以自定义)导入在新建的文件夹内

  如果当前目录里面有180个文件,那么就自动建立10个文件夹,并且每个文件夹精确导入18个文件即可

  有没有大神可以写个批处理搞定的?小弟感激不禁啊!
发表于 2012-2-23 11:48:31 | 显示全部楼层
你的意思是不是“自动建立新文件夹并将当前目录所有文件分配到新建文件夹中每个文件夹分到18个?”
 楼主| 发表于 2012-2-23 11:49:53 | 显示全部楼层
对对对,版主大神,就是这个意思!!!!!!在线等您答复!
发表于 2012-2-23 13:05:05 | 显示全部楼层
本帖最后由 cjiabing 于 2012-2-23 13:11 编辑

回复 3# 33453506
代码有点复杂,可能没空弄,我在弄其他事情。提供点思路:
1、获得当前目录层所有文件 dir /b *.*    文件夹不算在内。文件的个数统计办法,边搜索边统计可以用set /a num+=1,我更习惯在事后用findstr /n。
2、如何分配18个?你可以使用十八的倍数来判断,这个稍微难点。

  1. @echo off&setlocal enabledelayedexpansion
  2. ::设置要建立的文件夹顺序,Newp.txt是当前目录的所有文件。
  3. cd.>Newp.txt
  4. dir /b *.*>>Newp.txt
  5. set newf=0
  6. set num=0
  7. md New0
  8. for /f "tokens=*" %%a in (Newp.txt) do (
  9.     if !num! == 18 set num=0&set /a newf+=1&md New!newf!
  10.     copy %%a New!newf!&set /a num+=1
  11. )
复制代码

————————————————————
我自己试了下,不能直接用dir,先转个txt。
 楼主| 发表于 2012-2-23 13:14:18 | 显示全部楼层
确实是不会呀,大神,帮帮忙吧!!!!!
发表于 2012-2-23 13:15:08 | 显示全部楼层
如果有170个文件,那么自动建立几个文件夹,并且每个文件夹精确导入几个文件?
发表于 2012-2-23 13:18:08 | 显示全部楼层
回复 4# cjiabing


为什么不能直接用dir?
如果要排除文件夹,可以用:
  1. dir /b /a-d
复制代码
发表于 2012-2-23 13:53:18 | 显示全部楼层
本帖最后由 cjiabing 于 2012-2-23 13:54 编辑

回复 7# Perl


    为什么用txt你试试看就知道了。不想想太多,完成任务即可。
    呵呵,没用过“-”,谢谢提醒。
 楼主| 发表于 2012-2-23 16:09:59 | 显示全部楼层
谢谢版主大神,已经搞定了!哇哈哈哈!!!!!!!!!!!!!!!
发表于 2012-2-23 21:16:03 | 显示全部楼层
回复 4# cjiabing


cd.>Newp.txt
dir /b *.*>>Newp.txt
这种写法是何用意?

为什么不直接:
dir /b *.*>Newp.txt
发表于 2012-2-23 21:36:56 | 显示全部楼层
回复 8# cjiabing


为什么不用txt,你多学学就知道了
发表于 2012-2-23 21:37:42 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set fileNum=5
  4. set fileID=0
  5. set folderPre=MyFolder
  6. set folderSuf=0
  7. for /f "delims=" %%a in ('dir /b /a-d') do (
  8.     set /a mod=!fileID! %% %fileNum%
  9.     if "!mod!" == "0" (
  10.         set /a folderSuf+=1
  11.         md "%folderPre%_!folderSuf!"
  12.     )
  13.     set /a fileID+=1
  14.     copy "%%a" "%folderPre%_!folderSuf!"
  15. )
复制代码
发表于 2012-2-23 23:34:14 | 显示全部楼层
回复 12# Perl


    哥,你写的比我复杂呢!~

cd.>Newp.txt
dir /b *.*>>Newp.txt
这种写法是何用意?
————cd.>Newp.txt,这种写法是为了清空该文本文件,创建0字节文件,防止下次写入时重复读取上次文件的结果。所以,写代码要考虑重复使用的特性。
————如果你不使用的话,你重复几次运行就知道了。它的作用意义类似于del Newp.txt。

为什么不直接:
dir /b *.*>Newp.txt
————我原来是直接 for /f %%a in ('dir /b *.*') do echo;%%a  的。文件夹内只有21个文件,但结果却是在新创建的每个文件夹都塞满18个文件,那就意味着echo:%%a的值不是一次一个,而是一次一堆。
————因为不想过多纠缠于此,采用临时文件Newp.txt的办法转了一下,达到目标就行,不必太过计较。

    当然,如果你想知道为什么,你可以测试,以你的测试为准。因为我写整个代码只测试了两次,一次错误,一次正确,正确率只有50%以下。
发表于 2012-2-24 00:27:45 | 显示全部楼层
回复 13# cjiabing


请教一下12楼和4楼相比,复杂在什么地方?
发表于 2012-2-24 00:32:09 | 显示全部楼层
回复 13# cjiabing


10楼的疑问并不是说临时文件和for /f + dir
而是说,为何不把cd+dir >>合并成dir >
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 11:17 , Processed in 0.036773 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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