标题: [文件操作] 【已解决】批处理如何将遍历多个文件夹内,并按关键字移动都子文件的文件夹里面? [打印本页]
作者: zhengzhenhui 时间: 2024-4-25 19:19 标题: 【已解决】批处理如何将遍历多个文件夹内,并按关键字移动都子文件的文件夹里面?
本帖最后由 zhengzhenhui 于 2024-4-27 19:23 编辑
- @echo off
- for /f "tokens=*" %%a in ('dir/b 你好1*.*') do @(move "%%~a" ".\你好1")>nul
- for /f "tokens=*" %%a in ('dir/b 你好2*.*') do @(move "%%~a" ".\你好2")>nul
- for /f "tokens=*" %%a in ('dir/b 你好3*.*') do @(move "%%~a" ".\你好3")>nul
复制代码
这个是我现在用的当前文件夹,按关键字移动到对应名字文件夹内。
这个只是这样的文件夹有一百多个,怎么让这一百多个文件夹内的文件批量处理
举例 一级文件夹-------二级文件夹------三级文件夹
【属于是在二级文件夹内按关键字并移动文件到三级文件夹内】
【二级目录有很多个】
求大佬改一下
作者: 77七 时间: 2024-4-25 20:18
- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "%~dp0"
- set f="关键字1" "关键字2" "关键字3"
- for /d %%d in (*) do (
- for %%a in (%f%) do (
- if exist "%%d\%%~a*.*" (
- md "%%d\%%~a"
- move "%%d\%%~a*.*" "%%d\%%~a\"
- )
- )
- )
- pause
复制代码
作者: zhengzhenhui 时间: 2024-4-25 20:52
回复 2# 77七
谢谢
作者: ShowCode 时间: 2024-4-25 21:27
回复 1# zhengzhenhui - @echo off
- cd /d "%~dp0"
- for /f "delims=" %%d in ('dir /b /a-d') do (
- for %%a in ("关键字1" "关键字2" "关键字3") do (
- if exist "%%d\%%~a*.*" (
- md "%%d\%%~a"
- move "%%d\%%~a*.*" "%%d\%%~a\"
- )
- )
- )
复制代码
作者: zhengzhenhui 时间: 2024-4-26 02:19
回复 2# 77七
您好,如果文件是在下一级代码改如何写,比如文件在三级文件夹,移动到四级文件夹,,
或者是四级文件夹,移动到五级文件夹
您看能不能多发几个示例,感激不尽
作者: ShowCode 时间: 2024-4-26 09:28
回复 5# zhengzhenhui - @echo off
- cd /d "%~dp0"
- for /f "delims=" %%a in ('dir /b /a-d') do (
- echo 2级文件夹:%%a
- for /f "delims=" %%b in ('dir /b /a-d') do (
- echo ---3级文件夹:%%b
- for %%i in ("关键字1" "关键字2" "关键字3") do (
- if exist "%%a\%%b\%%~i*.*" (
- md "%%a\%%b\%%~i"
- move "%%a\%%b\%%~i*.*" "%%a\%%b\%%~i\"
- )
- )
- )
- )
复制代码
作者: terse 时间: 2024-4-26 10:30
楼主是想一次处理多项,比如移动二层到三层 and 移动三层到四层 两项都处理,或者只处理一项,比如 移动二层到三层或者移动三层到四层 两项只处理一项
作者: 77七 时间: 2024-4-26 12:46
回复 5# zhengzhenhui
- @echo off
- rem 批处理保存为ansi编码格式
- rem n大于等于2
- set n=3
- set f="关键字1" "关键字2" "关键字3"
- for /l %%l in (2,1,%n%) do (
- call set str=%%str%%\\.*
- )
- for /f "delims=" %%a in ('forfiles /s /c "cmd /c if @isdir==TRUE echo @relpath" ^|findstr /rc:"%str%" ^|findstr /rvc:"%str%\\.*" ') do (
- for %%x in (%f%) do (
- if exist "%%~a\%%~x*.*" (
- md "%%~a\%%~x"
- move "%%~a\%%~x*.*" "%%~a\%%~x\"
- )
- )
- )
- 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行改为:
- 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 (
就是文件是按对应名称移动进去,但是他会自己再创建一层文件夹再放进去- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "%~dp0"
- set f="关键字1" "关键字2" "关键字3"
- for /f "delims=" %%d in ('dir /b /s /ad') do (
- for %%a in (%f%) do (
- if exist "%%d\%%~a*.*" (
- md "%%d\%%~a"
- move "%%d\%%~a*.*" "%%d\%%~a\"
- )
- )
- )
- 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】 已经存在对应的【你好】文件夹了,所以出现这种情况。
作者: zhengzhenhui 时间: 2024-4-26 16:35
回复 15# 77七
不好意思,懂这个代码意思了,就是文件夹不需要自己创建,他会自己创建放入
作者: zhengzhenhui 时间: 2024-4-26 20:17
回复 17# 77七
加【-】的后面的字识别不到,,,
是不是不能加这个 - 字符
比如 你好-欢迎-文件 这个文件名 他只能识别到(你好)这个然后移动呢到文件夹
作者: 77七 时间: 2024-4-26 21:30
回复 19# zhengzhenhui
如果既存在 关键字【你好】,又存在【你好-欢迎】,把后者放到前面
复制代码
作者: zhengzhenhui 时间: 2024-4-26 22:07
回复 20# 77七
我是想这样子的, 关键字【你好-欢迎】
然后创建文件夹【欢迎】把【你好-欢迎】文件移动进去
↓ ↓ ↓ ↓ ↓
(欢迎)这个在【你好-欢迎】里面是识别不到
作者: 77七 时间: 2024-4-26 22:41
回复 21# zhengzhenhui
- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "%~dp0"
- set f="关键字1" "关键字2" "关键字3"
- for /f "delims=" %%d in ('dir /b /s /ad') do (
- for %%a in (%f%) do (
- if exist "%%d\*%%~a*.*" (
- md "%%d\%%~a"
- move "%%d\*%%~a*.*" "%%d\%%~a\"
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |