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

[文件操作] 批处理如何根据文件名中指定位置的字符串将文件移动到相应的文件夹里

本帖最后由 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 编辑 ]

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,31) do (
  3. set i=0%%i
  4. md !i:~-2!
  5. )
  6. for %%i in (*.jpg) do (
  7. set "i=%%i"
  8. set "i=!i:~6,2!"
  9. move "%%i" "!i!\"
  10. )
复制代码
测试通过

TOP

这样行不?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,31) do (
  3.     set i=0%%i
  4.     md "!i:~-2!" 2>nul
  5.     move "??????!i:~-2!_*.jpg" "!i:~-2!" >nul 2>nul
  6. )
  7. pause
复制代码

TOP

哈哈,2楼和3楼的只移动*.jpg图片文件,楼主说:有jpg,也有其他格式的图片。~_~
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir/b') do (set a=%%i&set a=!a:~6,2!
  3. if defined a (
  4. if exist !a! (move "%%i" !a!) else (md !a!&move "%%i" !a!)))
复制代码

[ 本帖最后由 anoki 于 2010-2-10 14:00 编辑 ]

TOP

4楼也不行叭...这个是不是把自己也move进去了
OrzDEF

TOP

回复 5楼 的帖子

说的也是,忘记P也在那个文件夹里面,如果我那个P文件名超过6位置的,也会把自身move进去~!
加多一个if
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir/b') do (set a=%%i&set a=!a:~6,2!
  3. if defined a (if !a! leq 31 (
  4. if exist !a! (move "%%i" !a!) else (md !a!&move "%%i" !a!))))
复制代码
其实把3楼的P做小小的修改可以啦,方法还不错呢!呵呵,学习了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,31) do (
  3.     set i=0%%i
  4.     md "!i:~-2!" 2>nul
  5.     move "??????!i:~-2!_*.*" "!i:~-2!" >nul 2>nul
  6. )
复制代码

TOP

谢谢

楼上测试可用 非常感谢大家

但我的数据量非常大,怕操作后恢复困难,哪位朋友可以给我提供下 逆操作 吗?

就是如果运行了以下后,恢复成原来样子的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 编辑 ]

TOP

  1. for /l %%i in (1,1,31) do (
  2.     set i=0%%i
  3.     move "!i:~-2!\??????!i:~-2!_*.*" >nul 2>nul
  4.     rem rd /s /q "!i:~-2!"
  5. )
复制代码

TOP

返回列表