找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23554|回复: 5

[文件操作] 批处理如何将指定某类文件夹下的文件剪切走并改名?

[复制链接]
发表于 2012-3-5 10:22:16 | 显示全部楼层 |阅读模式
本机有 D:\电影\abc111电影\ 和 D:\电影\abc234234SDER电影\  和 D:\电影\adsfe电影\  和 D:\电影\addfafesfe电影\ 等多个文件夹,每个文件夹下有各种文件!
请问
1、如何将 以“abc”开头命名的文件夹 下面的所有文件名称 前面加上  good_film_
2、如何将 剩下的其他 文件夹下面的所有文件名称 前面加上 bad_film_
3、将D:\电影 目录下的所有文件名以  good_film_  打头的文件,剪切到 D:\好电影\ 下面
4、将D:\电影 目录下的所有文件名以  bad_film_  打头的文件,剪切到 D:\坏电影\ 下面

如何用批处理实现啊?请教!
发表于 2012-3-5 12:32:50 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. md "d:\好电影" 2>nul&md "d:\坏电影" 2>nul
  3. for /r "d:\电影" %%i in (*) do (
  4.     set aa=%%i
  5.     if /i "!aa:~,9!"=="d:\电影\abc" (move "%%i" "d:\好电影\good_film_%%~ni%%~xi"
  6.        ) else (move "%%i" "d:\坏电影\bad_film_%%~ni%%~xi")
  7. )
复制代码

评分

参与人数 1技术 +1 收起 理由
pxhust + 1 感谢及时回复!

查看全部评分

 楼主| 发表于 2012-3-5 12:55:17 | 显示全部楼层
本帖最后由 pxhust 于 2012-3-5 12:59 编辑

谢谢及时回复!
但所有文件都被划分到  坏电影  文件夹去了……if 判断似乎没起作用啊

文件夹的名字“abc*”,其中的*可为任意字母数字的组合……
我在您给的代码中加入通配符,还是不起作用……
发表于 2012-3-5 13:41:42 | 显示全部楼层
奇怪,再试试这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. md "d:\好电影" 2>nul&md "d:\坏电影" 2>nul
  3. for /r "d:\电影" %%i in (*) do (
  4.     set "aa=%%i"
  5.     if /i "!aa:~,9!"=="d:\电影\abc" (move "%%i" "d:\好电影\good_film_%%~ni%%~xi"
  6.        ) else (move "%%i" "d:\坏电影\bad_film_%%~ni%%~xi")
  7. )
复制代码
发表于 2012-3-5 13:43:44 | 显示全部楼层
把以下代码放到 d:\电影 目录下执行
以下代码仅演示效果,如果对这个过程满意,请把从第2行开始的所有echo都去掉,代码将执行实际的重命名、移动文件等操作
顺手把移动后形成的空文件夹也删掉了,如果不需要删除空文件夹,请把 echo rd …… 这一句删除即可
另外,通过修改 set good 或者 set bad 语句,可以把移动的目的路径自行指定为其他目录,但是新建立的文件夹不要指定到 d:\电影 这个文件夹下,以免数据丢失

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "good=d:\好电影"
  4. set "bad=d:\坏电影"

  5. echo md "%good%" "%bad%" 2>nul
  6. for /f "delims=" %%i in ('dir /ad /b 2^>nul') do (
  7.     set "folder=%%i"
  8.     if /i "!folder:~0,3!"=="abc" (
  9.         set prefix=good_film_
  10.         set "NewFolder=!good!"
  11.     ) else (
  12.         set prefix=bad_film_
  13.         set "NewFolder=!bad!"
  14.     )
  15.     for /f "delims=" %%j in ('dir /a-d /b "%%i" 2^>nul') do (
  16.         echo ren "%%i\%%j" "!prefix!%%j"
  17.         echo move "%%i\!prefix!%%j" "!NewFolder!"
  18.     )
  19.     echo rd /q "%%i"
  20. )
  21. pause
复制代码
 楼主| 发表于 2012-3-5 15:41:23 | 显示全部楼层
两位的办法都超好用!感激不尽!

我的关键字其实不是“abc”,算是“ABCDE”,结果就需要把两位代码中 if 后面的“~,”之后的数字要修改成合适的长度,就对了!
不好意思,本人刚接触bat,上午专门学习了for的应用。这个数字的小错误让大侠们见笑了!是我没描述清楚问题,不好意思啊!再次感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 23:27 , Processed in 0.019779 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表