Board logo

标题: [文件操作] 【已解决】批处理如何将遍历多个文件夹内,并按关键字移动都子文件的文件夹里面? [打印本页]

作者: zhengzhenhui    时间: 2024-4-25 19:19     标题: 【已解决】批处理如何将遍历多个文件夹内,并按关键字移动都子文件的文件夹里面?

本帖最后由 zhengzhenhui 于 2024-4-27 19:23 编辑
  1. @echo off
  2. for /f "tokens=*" %%a in ('dir/b 你好1*.*') do @(move "%%~a" ".\你好1")>nul
  3. for /f "tokens=*" %%a in ('dir/b 你好2*.*') do @(move "%%~a" ".\你好2")>nul
  4. for /f "tokens=*" %%a in ('dir/b 你好3*.*') do @(move "%%~a" ".\你好3")>nul
复制代码
这个是我现在用的当前文件夹,按关键字移动到对应名字文件夹内。
这个只是这样的文件夹有一百多个,怎么让这一百多个文件夹内的文件批量处理
举例 一级文件夹-------二级文件夹------三级文件夹
【属于是在二级文件夹内按关键字并移动文件到三级文件夹内】
【二级目录有很多个】
求大佬改一下
作者: 77七    时间: 2024-4-25 20:18

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. set f="关键字1" "关键字2" "关键字3"
  5. for /d %%d in (*) do (
  6. for %%a in (%f%) do (
  7. if exist "%%d\%%~a*.*" (
  8. md "%%d\%%~a"
  9. move "%%d\%%~a*.*" "%%d\%%~a\"
  10. )
  11. )
  12. )
  13. pause
复制代码

作者: zhengzhenhui    时间: 2024-4-25 20:52

回复 2# 77七


    谢谢
作者: ShowCode    时间: 2024-4-25 21:27

回复 1# zhengzhenhui
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%d in ('dir /b /a-d') do (
  4.     for %%a in ("关键字1" "关键字2" "关键字3") do (
  5.         if exist "%%d\%%~a*.*" (
  6.             md "%%d\%%~a"
  7.             move "%%d\%%~a*.*" "%%d\%%~a\"
  8.         )
  9.     )
  10. )
复制代码

作者: zhengzhenhui    时间: 2024-4-26 02:19

回复 2# 77七


    您好,如果文件是在下一级代码改如何写,比如文件在三级文件夹,移动到四级文件夹,,
或者是四级文件夹,移动到五级文件夹
您看能不能多发几个示例,感激不尽
作者: ShowCode    时间: 2024-4-26 09:28

回复 5# zhengzhenhui
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%a in ('dir /b /a-d') do (
  4.     echo 2级文件夹:%%a
  5.     for /f "delims=" %%b in ('dir /b /a-d') do (
  6.         echo ---3级文件夹:%%b
  7.         for %%i in ("关键字1" "关键字2" "关键字3") do (
  8.             if exist "%%a\%%b\%%~i*.*" (
  9.                 md "%%a\%%b\%%~i"
  10.                 move "%%a\%%b\%%~i*.*" "%%a\%%b\%%~i\"
  11.             )
  12.         )
  13.     )
  14. )
复制代码

作者: terse    时间: 2024-4-26 10:30

楼主是想一次处理多项,比如移动二层到三层 and 移动三层到四层  两项都处理,或者只处理一项,比如 移动二层到三层或者移动三层到四层 两项只处理一项
作者: 77七    时间: 2024-4-26 12:46

回复 5# zhengzhenhui


  
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. rem n大于等于2
  4. set n=3
  5. set f="关键字1" "关键字2" "关键字3"
  6. for /l %%l in (2,1,%n%) do (
  7. call set str=%%str%%\\.*
  8. )
  9. for /f "delims=" %%a in ('forfiles /s /c "cmd /c if @isdir==TRUE echo @relpath" ^|findstr /rc:"%str%" ^|findstr /rvc:"%str%\\.*" ') do (
  10. for %%x in (%f%) do (
  11. if exist "%%~a\%%~x*.*" (
  12. md "%%~a\%%~x"
  13. move "%%~a\%%~x*.*" "%%~a\%%~x\"
  14. )
  15. )
  16. )
  17. pause
复制代码

作者: zhengzhenhui    时间: 2024-4-26 13:29

本帖最后由 zhengzhenhui 于 2024-4-26 13:34 编辑

回复 7# terse


    你好,每次处理文件位置是固定的,比如这次处理3级/4级文件夹,不会存在杂乱。
如果代码写的包含子文件内也是适用的,类似这一级关键字,下级文件夹名会出现匹配关键字,然后移入文件夹内
【可以理解为,处理当前多个文件夹下包含*你好*关键词移入当前层级*你好1*的文件夹内】
作者: zhengzhenhui    时间: 2024-4-26 13:48

回复 8# 77七


    n=3  是代表3级文件夹嘛
如果的包含全部下级文件夹,该如何写代码
作者: 77七    时间: 2024-4-26 14:07

回复 10# zhengzhenhui


   自己试一下,不行就加减1。
2楼代码第5行改为:

  1. for /f "delims=" %%d in ('dir /b /s /ad') do (
复制代码

作者: zhengzhenhui    时间: 2024-4-26 14:57

回复 11# 77七


    2楼代码第5行改为:
用了之后,部分文件移动进去,还自己又在里面创建了一层文件夹放进去了
作者: 77七    时间: 2024-4-26 15:24

回复 12# zhengzhenhui


   代码不要混用。对比执行前和执行后,代码有什么问题吗?
作者: zhengzhenhui    时间: 2024-4-26 15:59

回复 13# 77七


    2楼代码第5行改为:for /f "delims=" %%d in ('dir /b /s /ad') do (
就是文件是按对应名称移动进去,但是他会自己再创建一层文件夹再放进去
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. set f="关键字1" "关键字2" "关键字3"
  5. for /f "delims=" %%d in ('dir /b /s /ad') do (
  6. for %%a in (%f%) do (
  7. if exist "%%d\%%~a*.*" (
  8. md "%%d\%%~a"
  9. move "%%d\%%~a*.*" "%%d\%%~a\"
  10. )
  11. )
  12. )
  13. pause
复制代码

作者: 77七    时间: 2024-4-26 16:18

回复 14# zhengzhenhui


   
代码执行前 已经存在对应的文件夹,才会发生这种情况。
作者: zhengzhenhui    时间: 2024-4-26 16:29

回复 15# 77七


    我检查过了,文件都没有放到文件夹的,处于待处理状态
比如 【你好1】-文件和【你好】-文件夹   都是在一层的
      点完之后是有挪动到文件夹内,但是会多建立一层文件夹放入
       文件夹------    你好文件夹----------- 你好文件夹
                                ↓                               ↓
                        应该是放这个文件夹       代码又多创建了一层文件夹放入了
作者: 77七    时间: 2024-4-26 16:35

回复 16# zhengzhenhui


  
【你好1】-文件和【你好】-文件夹   都是在一层的
【你好1】 已经存在对应的【你好】文件夹了,所以出现这种情况。
作者: zhengzhenhui    时间: 2024-4-26 16:35

回复 15# 77七


    不好意思,懂这个代码意思了,就是文件夹不需要自己创建,他会自己创建放入
作者: zhengzhenhui    时间: 2024-4-26 20:17

回复 17# 77七


    加【-】的后面的字识别不到,,,
是不是不能加这个    -      字符
比如     你好-欢迎-文件     这个文件名  他只能识别到(你好)这个然后移动呢到文件夹
作者: 77七    时间: 2024-4-26 21:30

回复 19# zhengzhenhui


   
如果既存在 关键字【你好】,又存在【你好-欢迎】,把后者放到前面
  1. set f="你好-欢迎" "你好"
复制代码

作者: zhengzhenhui    时间: 2024-4-26 22:07

回复 20# 77七


    我是想这样子的, 关键字【你好-欢迎】
然后创建文件夹【欢迎】把【你好-欢迎】文件移动进去
                 ↓ ↓ ↓ ↓ ↓
(欢迎)这个在【你好-欢迎】里面是识别不到
作者: 77七    时间: 2024-4-26 22:41

回复 21# zhengzhenhui


  
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. set f="关键字1" "关键字2" "关键字3"
  5. for /f "delims=" %%d in ('dir /b /s /ad') do (
  6. for %%a in (%f%) do (
  7. if exist "%%d\*%%~a*.*" (
  8. md "%%d\%%~a"
  9. move "%%d\*%%~a*.*" "%%d\%%~a\"
  10. )
  11. )
  12. )
  13. pause
复制代码





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