标题: [文件操作] 批处理如何根据文件名中指定位置的字符串将文件移动到相应的文件夹里 [打印本页]
作者: skaoer 时间: 2010-2-10 03:11 标题: 批处理如何根据文件名中指定位置的字符串将文件移动到相应的文件夹里
本帖最后由 pcl_test 于 2016-7-7 20:08 编辑
大家好,我想问一个bat的问题
在A文件夹里有许多图片,他们是以下面那样格式的名字格式排列的
20070801_...jpg
20080803_...jpg
20080902_...jpg
有jpg,也有其他格式的图片,但他们前面都是 年月日_那样的格式排列
我现在想在A文件夹里运行bat,它能完成下面的功能
1 新建 名字从 01 到 31 一共31个文件夹
2 自动搜索A文件夹里的文件名,然后按照日期的特征按 日 这个时间来移动到对应的文件夹
例如文件 20070801 应该移动到 01 文件夹
例如文件 20080805 应该移动到 05 文件夹
例如文件 20070821 应该移动到 21 文件夹
实际上就是想把本来集中在一起的图片文件按 日 这个时间来移动到对应的文件夹
有朋友会吗?虚心求教!
[ 本帖最后由 skaoer 于 2010-2-10 03:12 编辑 ]
作者: Seter 时间: 2010-2-10 08:22
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,31) do (
- set i=0%%i
- md !i:~-2!
- )
- for %%i in (*.jpg) do (
- set "i=%%i"
- set "i=!i:~6,2!"
- move "%%i" "!i!\"
- )
复制代码
测试通过
作者: terse 时间: 2010-2-10 10:05
这样行不?- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,31) do (
- set i=0%%i
- md "!i:~-2!" 2>nul
- move "??????!i:~-2!_*.jpg" "!i:~-2!" >nul 2>nul
- )
- pause
复制代码
作者: anoki 时间: 2010-2-10 13:19
哈哈,2楼和3楼的只移动*.jpg图片文件,楼主说:有jpg,也有其他格式的图片。~_~
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir/b') do (set a=%%i&set a=!a:~6,2!
- if defined a (
- if exist !a! (move "%%i" !a!) else (md !a!&move "%%i" !a!)))
复制代码
[ 本帖最后由 anoki 于 2010-2-10 14:00 编辑 ]
作者: Seter 时间: 2010-2-10 15:18
4楼也不行叭...这个是不是把自己也move进去了
作者: anoki 时间: 2010-2-10 16:50 标题: 回复 5楼 的帖子
说的也是,忘记P也在那个文件夹里面,如果我那个P文件名超过6位置的,也会把自身move进去~!
加多一个if- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir/b') do (set a=%%i&set a=!a:~6,2!
- if defined a (if !a! leq 31 (
- if exist !a! (move "%%i" !a!) else (md !a!&move "%%i" !a!))))
复制代码
其实把3楼的P做小小的修改可以啦,方法还不错呢!呵呵,学习了- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,31) do (
- set i=0%%i
- md "!i:~-2!" 2>nul
- move "??????!i:~-2!_*.*" "!i:~-2!" >nul 2>nul
- )
复制代码
作者: skaoer 时间: 2010-2-10 19:33 标题: 谢谢
楼上测试可用 非常感谢大家
但我的数据量非常大,怕操作后恢复困难,哪位朋友可以给我提供下 逆操作 吗?
就是如果运行了以下后,恢复成原来样子的bat代码,谢谢各位!
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,31) do (
set i=0%%i
md "!i:~-2!" 2>nul
move "??????!i:~-2!_*.*" "!i:~-2!" >nul 2>nul
)
谢谢
[ 本帖最后由 skaoer 于 2010-2-10 20:53 编辑 ]
作者: terse 时间: 2010-2-11 10:47
- for /l %%i in (1,1,31) do (
- set i=0%%i
- move "!i:~-2!\??????!i:~-2!_*.*" >nul 2>nul
- rem rd /s /q "!i:~-2!"
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |