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

[文件操作] 求批量更改文件名的批处理代码

一个父文件夹内包含多个子文件夹,每个子文件夹内均包含.doc文件,但分为2种情形:
①某些子文件夹内的.doc文件只有一个,形如“x.doc”。②某些子文件夹内的.doc文件有2个或更多,形如“x1.doc,x2.doc,x3.doc...”(上述情形中x不特定) 
问题:如果是第①种情形,只需以该子文件夹名将存储于该文件夹内的x.doc的文件名前缀x更改为子文件夹名,即“子文件夹名.doc”;如果是第②种情形,只需将该子文件夹内的“x1.doc,x2.doc,x3.doc...”更改为“1.doc”,2.doc,3.doc...”即可。请教如何在一个批处理文件中实现上述要求。
请论坛高手出手相助!

[ 本帖最后由 plues 于 2009-2-21 22:09 编辑 ]

刚好我有个类似的,改jpg的,功能和你说的相近,发上来,具体你修改一下就可用了,应版主要求,发文上来,但发现论坛code有漏码现象,故贴原文,请版主见谅!这个bat的特点是子文件夹里的文件以文件夹名来命名,因此给文件夹取个好名字是关键。
@echo off
title 图片按创建时间以文件夹名命名
del gaiming.bat
   >>gaiming.bat echo @echo off
   >>gaiming.bat echo setlocal enabledelayedexpansion
   >>gaiming.bat echo for /f "delims=" %%%%i in ('dir/b/on *.jpg') do (
   >>gaiming.bat echo     set /a p+=1
   >>gaiming.bat echo     set "str=%%%%~xi"
   >>gaiming.bat echo     for /f "delims=" %%%%j in ("%%%%~dpi.") do (
   >>gaiming.bat echo         set "str=!str:%%%%~j-=!"
   >>gaiming.bat echo         ren "%%%%i" "%%%%~nj0!p!!str!"
   >>gaiming.bat echo     )
   >>gaiming.bat echo )
for /d %%i in (*) do (
copy /y gaiming.bat "%%i\"
ping /n 1 127.1
cd "%~dp0\%%i"
call gaiming.bat
del gaiming.bat
cd "%~dp0"
set p+=0
)
del gaiming.bat

[ 本帖最后由 hlzj88 于 2009-2-21 22:54 编辑 ]
目的,学习批处理

TOP

dir出文件列表,再做处理。。。

TOP

回复 2楼 的帖子

为方便他人阅读,建议直接贴代码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  在②这种情形中,x1.doc、x2.doc之类的需要保留为1.doc、2.doc,那么,改名的规则是什么?是文件名只保留最后一个字符?还是保留特定的流水号?或者是只去掉特定的字符串“x”?请明示,否则,这代码还真不好写。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 2楼 的帖子

多谢热情相助,我试试看。

TOP

回复 5楼 的帖子

在②这种情形中,改名的规则是,只需将x1.doc、x2.doc..中的x去掉即可,也就是只保留数字部分1,2...,最终文件名改为1.doc,2.doc...就可以了。

TOP

  既然是只保留数字部分,那么,就需要找个标志,把数字部分和x分离开来,所以,还需要你把x这部分的规律说一下才好写代码。建议把所有情形的x都罗列一下,并用文字说明x的规律。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 8楼 的帖子

每个子文件夹的x部分不特定,无规则,x都不一样。使用通配符*取代x,只保留x后面的数字,不知是否可行?

TOP

  要是没有规律,你怎么能把x和1、2、3……之类的数字分辨出来?要是你自己都无法分辨的规律,用代码就更不可能识别出来了。请准确描述你的意图。问题的关键是:如果你能把1、2、3……和x分开,请告诉大家,你是怎么分辨出来的?这不就是其中的规律么?
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表