Board logo

标题: [文件操作] [已解决]批处理如何按文件夹内文件个数移动文件夹? [打印本页]

作者: honghong33    时间: 2015-3-14 20:48     标题: [已解决]批处理如何按文件夹内文件个数移动文件夹?

本帖最后由 honghong33 于 2015-3-16 13:00 编辑

现在有上千个文件夹,文件夹名称由汉字、数字、字母、特殊符号构成。每个文件夹内有0-1000(不确定)个文件。
需要的处理是:文件夹内不含文件则删除,其余文件夹按照文件个数移动到同一个文件夹中,如先新建一个文件夹001.含有一个文件的文件夹都移动到这个文件夹中。

1、所有文件夹都在一个同一个文件夹中,需要移动的文件夹内不含文件夹。
2、如 - “-【 】、,~  ‘ ☆ ·」「等。
3、文件夹名称含有繁体字
作者: pcl_test    时间: 2015-3-14 21:13

回复 1# honghong33
1、所有文件夹都在同一文件夹里吗?并且是同级关系吗?
2、都有哪些特殊字符?
作者: honghong33    时间: 2015-3-14 21:33

回复 2# pcl_test

1、所有文件夹都在一个同一个文件夹中,需要移动的文件夹内不含文件夹。
2、如 - “-【 】、,~  ‘ ☆ ·」「等。
3、文件夹名称含有繁体字
作者: pcl_test    时间: 2015-3-14 21:58

本帖最后由 pcl_test 于 2015-3-14 22:01 编辑

回复 3# honghong33
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /ad /b') do (
  4. set n=0
  5. pushd "%%a\"
  6. for /f "delims=" %%a in ('dir /a-d /b 2^>nul') do set /a n+=1
  7. popd
  8. if !n! == 0 (
  9. rd "%%a\" /q
  10. ) else (
  11. set name=0000!n!
  12. set name=!name:~-5!
  13. if not exist "结果\!name!\" md "结果\!name!\"
  14. move "%%a" "结果\!name!\"
  15. )
  16. )
  17. pause
复制代码

作者: bailong360    时间: 2015-3-14 22:27

  1. @Echo Off
  2. SetLocal EnableDelayedExpansion
  3. For /D %%a In (*) Do (
  4. Set Empty=1
  5. Dir /A-D /B "%%a"&&Set Empty=0
  6. If !Empty!==1 (Rd "%%a") Else (
  7. For /F %%b In ('Dir /A-D "%%a"^|Findstr /C:"个文件"') Do Set Num=00%%b&Md ..\!Num:~-3!&Copy "%%a\*" ..\%%b
  8. )
  9. )>nul 2>nul
复制代码

作者: honghong33    时间: 2015-3-14 22:39

回复 4# pcl_test

文件夹名称中含有^和! 无法移动
作者: pcl_test    时间: 2015-3-14 22:46

回复 6# honghong33
这两个符号需要去掉或替换掉,可以改文件夹名吗??
作者: cobat    时间: 2015-3-15 12:28

  1. @echo off
  2. (for /f "delims=" %%a in ('dir /ad /b') do (
  3.     set n=&set "a=%%a"
  4.     pushd "%%a"&for %%b in (*) do set/a n+=1
  5.     setlocal enabledelayedexpansion
  6.     set/a n+=10000
  7.     (popd&rd "!a!")||(md !n:~1!&move "!a!" !n:~1!)
  8.     endlocal
  9. ))>nul 2>nul
  10. pause
复制代码

作者: honghong33    时间: 2015-3-15 14:53

回复 7# pcl_test


    可以去掉这两个符号
作者: pcl_test    时间: 2015-3-15 21:43

回复 9# honghong33
  1. @echo off
  2. for /f "delims=" %%a in ('dir /ad /b') do (
  3. set "fname=%%a"
  4. set n=0
  5. pushd "%%a\"
  6. for /f "delims=" %%b in ('dir /a-d /b 2^>nul') do set /a n+=1
  7. popd
  8. setlocal enabledelayedexpansion
  9. if !n! == 0 (
  10. rd "!fname!\" /q
  11. ) else (
  12. set name=0000!n!
  13. set name=!name:~-5!
  14. if not exist "结果\!name!\" md "结果\!name!\"
  15. move "!fname!" "结果\!name!\"
  16. )
  17. endlocal
  18. )
  19. pause
复制代码





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