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

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

本帖最后由 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
复制代码
这个是我现在用的当前文件夹,按关键字移动到对应名字文件夹内。
这个只是这样的文件夹有一百多个,怎么让这一百多个文件夹内的文件批量处理
举例 一级文件夹-------二级文件夹------三级文件夹
【属于是在二级文件夹内按关键字并移动文件到三级文件夹内】
【二级目录有很多个】
求大佬改一下
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

评分人数

bat小白,请多指教!谢谢!

TOP

回复 2# 77七


    谢谢

TOP

回复 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. )
复制代码
测试代码之前请做好备份

TOP

回复 2# 77七


    您好,如果文件是在下一级代码改如何写,比如文件在三级文件夹,移动到四级文件夹,,
或者是四级文件夹,移动到五级文件夹
您看能不能多发几个示例,感激不尽

TOP

回复 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. )
复制代码
测试代码之前请做好备份

TOP

楼主是想一次处理多项,比如移动二层到三层 and 移动三层到四层  两项都处理,或者只处理一项,比如 移动二层到三层或者移动三层到四层 两项只处理一项

TOP

回复 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
复制代码
bat小白,请多指教!谢谢!

TOP

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

回复 7# terse


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

TOP

回复 8# 77七


    n=3  是代表3级文件夹嘛
如果的包含全部下级文件夹,该如何写代码

TOP

回复 10# zhengzhenhui


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

  1. for /f "delims=" %%d in ('dir /b /s /ad') do (
复制代码
bat小白,请多指教!谢谢!

TOP

回复 11# 77七


    2楼代码第5行改为:
用了之后,部分文件移动进去,还自己又在里面创建了一层文件夹放进去了

TOP

回复 12# zhengzhenhui


   代码不要混用。对比执行前和执行后,代码有什么问题吗?
bat小白,请多指教!谢谢!

TOP

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

TOP

回复 14# zhengzhenhui


   
代码执行前 已经存在对应的文件夹,才会发生这种情况。
bat小白,请多指教!谢谢!

TOP

返回列表