标题: [文本处理] 求助bat脚本批量处理文件拷贝到相应文件夹的问题 [打印本页]
作者: 1989615wx 时间: 2023-3-15 12:27 标题: 求助bat脚本批量处理文件拷贝到相应文件夹的问题
现在有一堆小文件,想利用bat实现一键归类,具体场景如下:
460_395_已处理__文件名:【2】样本交接单 9k 骆.pdf[du].1A.K.TIF
460_395_已处理__文件名:【2】样本交接单 9k 骆.pdf[du].2A.K.TIF
460_395_已处理__文件名:蓝螳螂+固安检查6K,郑.pdf[dq].1A.K.TIF
620_485_已处理__文件名:【2】内部签证单+人事异动表 4k 骆.pdf[db].1A.K.TIF
620_485_已处理__文件名:【2】内部签证单+人事异动表 4k 骆.pdf[db].2A.K.TIF
620_485_已处理__文件名:物资转库单 4k 骆.pdf[de].1A.K.TIF
620_485_已处理__文件名:输液卡 4K 何.pdf[df].1A.K.TIF
等等等等,有数百个这样的文件, 但是他们的前缀都是相同的,现在想要达到的效果是自动创建文件夹,并且把相应的文件拷贝到相应的文件夹里面,效果如下:
620_485_已处理__文件名:归类xxxx年xx月xx日 xx时xx分xx秒-----------yy
460_395_已处理__文件名:归类xxxx年xx月xx日 xx时xx分xx秒-----------yy
文件夹xx表示当前的电脑时间,后面的yy表示该文件夹内文件的个数
作者: pd1 时间: 2023-3-15 14:46
- @echo off
- for /f "tokens=1-2 delims=:" %%a in ('dir /b *.TIF') do (
- md %%a >nul 2>nul
- move "%%a:%%b" "%%a"
- )
- for /f "delims=" %%a in ('dir /b /ad') do (
- for /f %%i in ('powershell -c "(dir %%a).length"') do (
- ren %%a %%a:归类%date:~0,4%年%date:~5,2%月%date:~8,2%日%time:~0,2%时%time:~3,2%分%time:~6,2%秒-----------%%i
- )
- )
- pause
复制代码
作者: 77七 时间: 2023-3-15 15:44
- @echo off
- rem 文件夹名称除了末尾那一串"-",不要存在"-"
- rem 支持新文件再次归入(已经存在文件夹及需要归入该文件夹的文件,归入后更新时间、数量。)
- cd /d "%~dp0"
- for /f "delims=" %%i in ('powershell -c "Get-Date -UFormat '%%Y年%%m月%%d日 %%H时%%M分%%S秒'"') do (
- set "timeNow=%%i"
- )
- for /f "tokens=1* delims=:" %%a in ('dir /b /ad 2^>nul') do (
- move "%%a*.*" "%%a:%%b" 1>nul 2>nul && (ren "%%a:%%b" "%%a:归类%timeNow%-----------000")
- )
- for /f "tokens=1* delims=:" %%a in ('dir /b /a-d 2^>nul ^| findstr /vie ".bat"') do (
- if not exist "%%a:归类%timeNow%-----------000" (
- md "%%a:归类%timeNow%-----------000"
- )
- move "%%a:%%b" "%%a:归类%timeNow%-----------000\"
- )
- setlocal enabledelayedexpansion
- for /f "tokens=1-2 delims=-" %%a in ('dir /b /ad') do (
- pushd "%%a-----------%%b"
- for /f "delims=" %%i in ('dir /b /a-d ^| find /c /v ""') do (
- set num=00%%i
- set num=!num:~-3!
- )
- popd
- ren "%%a-----------%%b" "%%a-----------!num!"
- )
- endlocal
- pause
复制代码
作者: Batcher 时间: 2023-3-16 11:06
回复 1# 1989615wx
使用 dir + find 统计子文件夹内的文件个数,避免在for循环内部频繁调用PowerShell。- @echo off
- for /f "tokens=1* delims=:" %%a in ('dir /b /a-d *.TIF') do (
- if not exist "%%a" (
- md "%%a"
- )
- move "%%a:%%b" "%%a"
- )
- for /f "delims=" %%a in ('dir /b /ad') do (
- for /f %%i in ('dir /b /a-d %%a ^| find /v /c ""') do (
- ren "%%a" "%%a:归类%date:~0,4%年%date:~5,2%月%date:~8,2%日%time:~0,2%时%time:~3,2%分%time:~6,2%秒-----------%%i"
- )
- )
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
作者: Batcher 时间: 2023-3-16 11:12
回复 1# 1989615wx
BAT调用PowerShell获取日期时间,避免不同系统的日期时间格式差异导致代码出错。- @echo off
- for /f "tokens=1* delims=:" %%a in ('dir /b /a-d *.TIF') do (
- if not exist "%%a" (
- md "%%a"
- )
- move "%%a:%%b" "%%a"
- )
- for /f "delims=" %%i in ('powershell -c "Get-Date -UFormat '%%Y年%%m月%%d日%%H时%%M分%%S秒'"') do (
- set "SysTS=%%i"
- )
- for /f "delims=" %%a in ('dir /b /ad') do (
- for /f %%i in ('dir /b /a-d %%a ^| find /v /c ""') do (
- ren "%%a" "%%a:归类%SysTS%-----------%%i"
- )
- )
复制代码
参考:
http://bbs.bathome.net/thread-3328-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |