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

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

本帖最后由 pcl_test 于 2016-7-22 22:45 编辑

规则说明:

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

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

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

  有没有大神可以写个批处理搞定的?小弟感激不禁啊!

回复 20# 523066680


    看官,那是昨晚的事情了!~
    昨晚的代码比较潦草些,现在修改完善如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. ::文件分类管理:按每18个文件装进一个文件夹整理。
  3. echo;&echo;    开始整理……&echo;
  4. set newf=0
  5. set numf=0
  6. set conf=0
  7. if not exist New!newf! md New!newf!
  8. for /f "tokens=*" %%a in ('dir /b /a-d') do (
  9.     if !numf! geq 18 set numf=0&set /a newf+=1&md New!newf!
  10.     if not "%%~na"=="%~n0" copy "%%~a" New!newf!&set /a numf+=1
  11.     set /a conf=!newf!*18+!numf!
  12. )
  13. echo;&echo;    整理完成,共 !conf! 个文件,请注意检查!&pause>nul
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 523066680 于 2012-2-24 20:35 编辑

回复 19# terse


恩,也可以  dir 的时候 ^|find /v "%~nx0"
还可以选择把批处理放在文件夹外部~  不过,还是看楼主具体要求了。也许批处理本身进去也无所谓

今晚真热闹


也写了,不见得好
  1. @echo off &setlocal enabledelayedexpansion
  2. set /a n=18,folder=0
  3. for /f "tokens=*" %%a in ('dir /b /a-d * ^|find /v "%~nx0"') do (
  4. if !n! lss 18 (
  5. set /a n+=1
  6. ) else (
  7. set /a n=1,folder+=1
  8. md fold_!folder!
  9. )
  10. copy "%%a" fold_!folder!\
  11. )
  12. pause
复制代码

TOP

回复  cjiabing


    他那个for好像会把批处理也复制进去吧……
filetest>dir *.bat  /s /b
filetes ...
523066680 发表于 2012-2-24 19:55

看前面代码 应该没避开哦
本应添加 IF "%%i" neq "%~nx0" 的  即可

TOP

回复 13# cjiabing


    他那个for好像会把批处理也复制进去吧……
filetest>dir *.bat  /s /b
filetest\fo.bat
filetest\test.bat
filetest\test2.bat
filetest\MyFolder_21\fo.bat
filetest\MyFolder_21\test.bat
filetest\MyFolder_21\test2.bat

jiabing的文件列表选在了文本里,避开了这个问题。

TOP

不知道这个18在这里是随机的还是固定的
  1. @echo off&setlocal enabledelayedexpansion
  2. set M=18
  3. for /f "delims=" %%i in ('dir /b /a-d *.*') do (
  4.     set /a Num=N/M,D=N%%M,N+=1
  5.     if !D! EQU 0 MD "New_!Num!" 2>NUL
  6.     copy "%%i"  "New_!Num!" >NUL
  7. )
  8. pause
复制代码

TOP

回复 15# Perl

    人比较笨没办法!~
    你学得蛮细的嘛~!我习惯了这种传统的做工,所以没法去了解dir>txt这样也得,佩服兄了!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 13# cjiabing


10楼的疑问并不是说临时文件和for /f + dir
而是说,为何不把cd+dir >>合并成dir >

TOP

回复 13# cjiabing


请教一下12楼和4楼相比,复杂在什么地方?

TOP

回复 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%以下。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

  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. )
复制代码

TOP

回复 8# cjiabing


为什么不用txt,你多学学就知道了

TOP

回复 4# cjiabing


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

为什么不直接:
dir /b *.*>Newp.txt

TOP

谢谢版主大神,已经搞定了!哇哈哈哈!!!!!!!!!!!!!!!

TOP

本帖最后由 cjiabing 于 2012-2-23 13:54 编辑

回复 7# Perl


    为什么用txt你试试看就知道了。不想想太多,完成任务即可。
    呵呵,没用过“-”,谢谢提醒。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表