Board logo

标题: [文件操作] 批处理怎样把文件分存到文件夹? [打印本页]

作者: 2096258508    时间: 2023-3-12 10:27     标题: 批处理怎样把文件分存到文件夹?

我有1~1000.TXT这几个文件,需要新建99个文件夹,每个里面放10个文件,并且是按照数字大小排的,例如1(文件夹)里面有1.txt 2.txt....10.txt 谢谢大佬!!!
作者: jyswjjgdwtdtj    时间: 2023-3-12 11:10

本帖最后由 jyswjjgdwtdtj 于 2023-3-12 12:04 编辑
  1. set fso=createobject("scripting.filesystemobject")
  2. set nowfolder=fso.getfolder("txt所在地文件夹")
  3. tofolder="100个文件夹所在地文件夹"
  4. for each file in nowfolder.files
  5. nowtofolder=tofolder&"\"&cstr(fix((split(file.name,".")(0))/10)+1)
  6. if not fso.folderexists(nowtofolder) then fso.createfolder(nowtofolder)
  7. fso.copyfile file.path,nowtofolder&"\"&file.name,true
  8. next
复制代码
如果比如800到810没有文件
就不会创建80号文件夹

保存为vbs文件
作者: Batcher    时间: 2023-3-12 11:38

回复 1# 2096258508


test_1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /l %%i in (1,1,1000) do (
  5.     set /a FolderName=FileCount/10+1
  6.     set /a FileCount+=1
  7.     md "!FolderName!" 2>nul
  8.     move "%%i.txt" "!FolderName!"
  9. )
复制代码

作者: Batcher    时间: 2023-3-12 11:39

回复 1# 2096258508


test_2.bat

  1. @echo off
  2. set "FileMax=10"
  3. cd /d "%~dp0"
  4. setlocal enabledelayedexpansion
  5. set "FileCount=0"
  6. set "FolderName=1"
  7. for /l %%i in (1,1,1000) do (
  8.     if exist "%%i.txt" (
  9.         set /a FileCount+=1
  10.         if !FileCount! gtr !FileMax! (
  11.             set /a FolderName+=1
  12.             set "FileCount=1"
  13.         )
  14.         if not exist "!FolderName!" (
  15.             md "!FolderName!"
  16.         )
  17.         move "%%i.txt" "!FolderName!"
  18.     )
  19. )
复制代码

作者: buyiyang    时间: 2023-3-12 11:57

本帖最后由 buyiyang 于 2023-3-12 14:39 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*.txt) do (
  4. set /a d=^(%%~ni+9^)/10
  5. md "!d!" 2>nul
  6. move "%%i" "!d!\"
  7. )
  8. pause
复制代码
如果1~1000.txt有缺失,实现每个文件夹十个文件
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if "%~1" neq "mv" (
  4. for /f "tokens=1,2" %%a in ('"%~f0" mv ^| sort') do (
  5. set /a n+=1
  6. set /a d=^(!n!+9^)/10
  7. echo f | xcopy /y "%%b" "!d!\%%a"
  8. )
  9. pause
  10. ) else (
  11. for %%i in (*.txt) do (
  12. set /a f=10000+%%~ni
  13. echo.!f:~1!.txt %%i
  14. )
  15. )
复制代码

作者: 77七    时间: 2023-3-12 12:33

  1. @echo off
  2. set /a m=0
  3. setlocal enabledelayedexpansion
  4. for /l %%l in (1,1,990) do (
  5. set n=%%l
  6. if !n:~-1! equ 1 (
  7. set /a m+=1
  8. md "!m!\"
  9. )
  10. move "%%l.txt" "!m!\" 2>nul
  11. )
  12. endlocal
  13. pause
复制代码
只创建99个文件夹
作者: terse    时间: 2023-3-12 15:26

  1. @echo off
  2. set m=10
  3. setlocal enabledelayedexpansion
  4. for /l %%i in (1,1,990) do (
  5.      if exist "%%i.txt" (
  6.         set /a n=num/m+1,num+=1
  7.         md "!n!" 2>nul
  8.         move "%%i.txt" "!n!\"
  9.     )
  10. )
  11. pause
复制代码

作者: 2096258508    时间: 2023-3-12 23:47

回复  2096258508


test_1.bat

  • 文件名 1.txt ~ 1000.txt
  • 中间没有缺失的文件名
    Batcher 发表于 2023-3-12 11:38


  • 如果我的文件不止这些是需要修改什么或者可以使他变得灵活检测有几个文件,我的文件都是1-n.TXT的谢谢大佬!!!
    作者: qixiaobin0715    时间: 2023-3-13 09:11

    本帖最后由 qixiaobin0715 于 2023-3-13 09:18 编辑

    回复 8# 2096258508
    1. @echo off
    2. setlocal enabledelayedexpansion
    3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    4.     set /a "Folder=(%%~ni-1)/10+1"
    5.     md "!Folder!" 2>nul
    6.     move "%%i" "!Folder!\">nul
    7. )
    8. pause
    复制代码
    没仔细看其他回帖,实际上和5楼第1组代码基本雷同。
    作者: Batcher    时间: 2023-3-13 09:37

    回复 8# 2096258508


    统计txt文件个数1-1.bat
    1. @echo off
    2. cd /d "%~dp0"
    3. set "FileNum=0"
    4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    5.     set /a FileNum+=1
    6. )
    7. echo The number of txt files is: %FileNum%
    8. pause
    复制代码
    统计txt文件个数1-2.bat
    1. @echo off
    2. cd /d "%~dp0"
    3. set "FileNum=0"
    4. for %%i in (*.txt) do (
    5.     set /a FileNum+=1
    6. )
    7. echo The number of txt files is: %FileNum%
    8. pause
    复制代码
    统计txt文件个数1-3.bat
    1. @echo off
    2. cd /d "%~dp0"
    3. set "FileNum=0"
    4. for /f "delims=" %%i in ('dir /b /a-d *.txt ^| find /c /v ""') do (
    5.     set "FileNum=%%i"
    6. )
    7. echo The number of txt files is: %FileNum%
    8. pause
    复制代码

    作者: 2096258508    时间: 2023-3-13 10:28

    回复 10# Batcher


        谢谢大佬,问题解决了,真是为我省了大把时间




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