标题: [文件操作] 批处理如何按文件的字段值来新建文件夹以及移动文件夹? [打印本页]
作者: 304802301 时间: 2021-9-26 16:51 标题: 批处理如何按文件的字段值来新建文件夹以及移动文件夹?
求一个bat语句。。
实际情况,有2个文件夹,分别叫做“零散文件夹”和“目标文件夹”
1、“零散文件夹”里面有1000000个文件夹,文件夹名字无任何规律(比如某个文件夹名字叫ASDFGH)。
2、每个文件夹里面只有1个文件,文件名字也无规律,每个文件都是tf格式(比如文件名字叫330110.tf)。
3、tf文件可以用txt方式打开,都有一个Code字段和值,表达方式为Code="数字",每个tf文件里的Code值,可能一样,可能不一样,比如Code="231291011"。
4、“目标文件夹”里面是空的
5、执行这个bat后,读取每个tf文件里面的Code字段和值(比如Code="231291011"),在“目标文件夹”里面新建一个文件夹,名字就是这个Code值(231291011),并把相同Code值的tf文件(330110.tf)连同其父文件夹(ASDFGH)一同剪切到这个文件夹里面来。
执行bat之前:
-1“零散文件夹”
1.1、ASDFGH→330110.tf(Code="231291011")
1.2、aksjdlqw→0980980.tf(Code="231291011")
1.3、iojojoioqqq→00ooiiqq.tf(Code="2410909809")
-2“目标文件夹”
空
=============================================
执行bat之后:
-1“零散文件夹”
空
-2“目标文件夹”
1.1、231291011
1.1.1、ASDFGH→330110.tf
1.1.2、aksjdlqw→0980980.tf
1.2、2410909809
1.2.1、iojojoioqqq→00ooiiqq.tf
具体的文件案例和详细的图片说明放在网盘上了
https://cowtransfer.com/s/99247a93f2e841
作者: idwma 时间: 2021-9-26 21:33
- @echo off
- setlocal enabledelayedexpansion
- for /r .\零散文件夹 %%a in (*.tf) do (
- for /f "tokens=1,5 delims== " %%b in (%%a) do (
- if "%%b"=="<ConstructProject" (
- set d=%%c
- md .\目标文件夹\!d:"=!
- move %%~dpa. .\目标文件夹\!d:"=!\
- )
- )
- )
- pause
复制代码
作者: taofan712 时间: 2021-9-29 10:42
- @echo off
- for /r 零散文件夹 %%a in (*.tf) do for /f skip^=1^ tokens^=4^ delims^=^" %%i in (%%a) do for %%b in ("%%~dpa.") do xcopy 零散文件夹\%%~nxb 目标文件夹\%%i\%%~nxb\
- pause
复制代码
作者: qixiaobin0715 时间: 2021-9-29 14:05
本帖最后由 qixiaobin0715 于 2021-9-29 14:10 编辑
回复 1# 304802301
把批处理放在零散文件夹和目标文件夹同一目录中:- @echo off
- set folder1=零散文件夹
- set folder2=目标文件夹
- cd %folder1%
- (for /f "delims=" %%i in ('dir /b /ad') do (
- for /f "tokens=4,5 delims== " %%a in ('type "%%i\*.tf"') do (
- if "%%a"=="Code" (
- if not exist "%%~b" md "%%~b"
- move "%%i" "%%~b"
- )
- )
- )
- for /d %%j in (*) do move "%%j" "%%~dpj..\%folder2%")>nul 2>nul
- pause
复制代码
按你的说法文件夹及文件较多,显示的信息进行了同一屏蔽。
作者: qixiaobin0715 时间: 2021-9-29 14:35
楼上代码多了一次移动,修改后效率要高一些:- @echo off
- set folder1=零散文件夹
- set folder2=目标文件夹
- cd %folder1%
- (for /f "delims=" %%i in ('dir /b /ad') do (
- for /f "tokens=4,5 delims== " %%a in ('type "%%i\*.tf"') do (
- if "%%a"=="Code" (
- if not exist "%%~dpi..\%folder2%\%%~b" md "%%~dpi..\%folder2%\%%~b"
- move "%%i" "%%~dpi..\%folder2%\%%~b"
- )
- )
- ))>nul 2>nul
- pause
复制代码
作者: 304802301 时间: 2021-9-29 20:00
回复 5# qixiaobin0715
大佬:有这个提示:
'er2' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
文件名、目录名或卷标语法不正确。
请按任意键继续. . .
另外有个情况:
1、文件格式不一定为tf,有时候会有其他格式
2、文件里面的code字段不一定在哪个位置上,可能在比较前面,也可能在比较后面的,但是一定会有Code="XXXXX"这个字段
作者: 304802301 时间: 2021-9-29 20:04
回复 2# idwma
大佬:
1、文件格式不一定为tf,有时候会有其他格式
2、文件里面的code字段不一定在哪个位置上,可能在比较前面,也可能在比较后面的,但是一定会有Code="XXXXX"这个字段。我感觉你的代码里没有code字段。。。执行了之后发现部分文件是正确移动的,部分没有移动。。还在原地。。
作者: qixiaobin0715 时间: 2021-9-29 20:26
回复 6# 304802301
那是你自己没有说清楚,我是按你提供的文件测试的,我这里没有问题啊。代码不要手打,代码下面有“复制代码”的字样,点击后再粘贴到批处理文件,按你提供的文件试试是否还有问题。
然后把你的目录结构说清楚。
作者: qixiaobin0715 时间: 2021-10-1 09:14
本帖最后由 qixiaobin0715 于 2021-10-1 09:17 编辑
回复 6# 304802301
适用其它格式“文本”文件,每个文件夹中最好是只有一个文件且是文本文件,否则可能会出错。你提供的目录样本链接已失效,未经测试:- @echo off
- set "folder1=零散文件夹"
- set "folder2=目标文件夹"
- setlocal enabledelayedexpansion
- cd "%folder1%"
- (for /f "delims=" %%i in ('dir /b /ad') do (
- for /f "delims=" %%a in ('findstr "Code" "%%i\*.*"') do (
- set "str=%%a"
- set "str=!str:*Code=!"
- for /f "delims== " %%b in ("!str!") do (
- if not exist "%%~dpi..\%folder2%\%%~b" md "%%~dpi..\%folder2%\%%~b"
- move "%%i" "%%~dpi..\%folder2%\%%~b"
- )
- )
- ))>nul 2>nul
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |