中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]批处理批量重命名同一目录下的"*.txt"文件
« [1] [2] »
作者:
标题: [求助]批处理批量重命名同一目录下的"*.txt"文件 上一主题 | 下一主题
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『楼 主』:  [求助]批处理批量重命名同一目录下的"*.txt"文件

批处理批量重命名同一目录下的"*.txt"文件 和 上一级目录的名字[XP系统]
这个批处理文件就放在*.txt文件同一目录下

文件夹名如"资料各3",3也可以大于10,以下用3表示
"[文件名].txt"变成"[文件名]---3.txt",3就是文件夹中的那个数字
如果遇到[文件名]中带有"---3",如:"a---3.txt"就不用重命名了,如果是"---2"就把2变成3
如果遇到如:"a.txt"和"a---3.txt"这样的,就把"a.txt"变成"a1---3.txt";如果"a1---3.txt"也存在,就继续往上推,变成"a2---3.txt".即遇到重名的就变化一下,用数字作变量就行,但"---3"不能变.
最后计算一下*.txt文件的个数,用个数乘以3得到一个数N,重命名目录名为"资料各3---N"

=======================
举例:[文件夹名为"资料各3"]
原来的         要变成这样的
a.txt            a---3.txt
b.txt            b---3.txt
c-----3.txt      c-----3.txt("-"符号超过3个也不用变化)
a a.txt          a a---3.txt(文件名中可能有空格,也可能有汉字)

d.txt            d2---3.txt
d---3.txt       d---3.txt
d1---3.txt      d1---3.txt

e.txt            e1---3.txt
e---3.txt        e---3.txt
e1.txt           e11---3.txt

f---2.txt        f---3.txt
最后文件夹名要改成"资料各3---33",并且重复运行批处理的话只是把33进行变化.
=======================

我自己写的(不大懂什么意思就拿来用了,参考了本站搜索出来的"重命名"帖子):
---------------
set a=---2
for /f "delims=" %%i in ('dir /b *.txt') do ren "%%i" "%%~ni%a%.txt"
pause
---------------
我不会写判断的,使得重复运行后出现"a---3---3.txt"这样的名字.这也是理所当然的,所以请教大家帮忙.

我的要求可能是太高了点,不好意思.我自己也在更改批处理+思考中.

[ Last edited by wxcute on 2007-9-4 at 04:25 PM ]

2007-9-4 13:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

"delims=-"

2007-9-4 13:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 3 楼』:  

谢谢,我先看一下

==========
看了下
部分会提示找不到指定文件,重复运行也会

[ Last edited by wxcute on 2007-9-4 at 01:53 PM ]

2007-9-4 13:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

for /f "tokens=1,2* delims=-" %%i in ('dir /b *.txt') do ren "%%i%%j" "%%~ni%a%.txt"

[ Last edited by slore on 2007-9-4 at 02:12 PM ]

2007-9-4 14:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 5 楼』:  

参考了前辈们的作品,稍微改进了一下,可以提示输入数目了
==========
set /p a=输入要改写的数目N,格式为[---N](如:---3):
for /f "delims=" %%i in ('dir /b *.txt') do ren "%%i" "%%~ni%a%.txt"
pause
==========

[ Last edited by wxcute on 2007-9-4 at 04:44 PM ]

2007-9-4 14:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 6 楼』:  

slore
你好,用你4楼的方法,其中
=====
d.txt
e.txt
f---2.txt
=====
改不过来

[ Last edited by wxcute on 2007-9-4 at 04:19 PM ]

2007-9-4 16:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  

f--2.txt你要改成什么?不说说本身已经是了就不变麽?多次运行不追加麽?

我是测试过的……



2007-9-4 16:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 8 楼』:  

就是当我设数目为3的时候,要把2变成3

还要谢谢你还帮我测试,你真是个好人

我的题目有点儿复杂,可能会很麻烦,你再仔细看下 1楼 题目

[ Last edited by wxcute on 2007-9-4 at 04:24 PM ]

2007-9-4 16:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

@echo off
Set a=--5
for /f "tokens=1,2* delims=-" %%i in ('dir /b *.txt') do (
if "%%j"=="" (ren "%%i" "%%~ni%a%.txt") else (ren "%%i--%%j" "%%~ni%a%.txt")
)
pause


才发现你的j---2里面有3个!-

2007-9-4 16:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 10 楼』:  

还是有问题, 因为" - "这个符号数目最少要3个,

超过3个" - "只变数字,如:
c-----3,有五个-,数字没错,不变化
g----2,有四个-,数字不对,应变成:g----3

只有一个" - ",名字不变化,直接在后面加上"---3",如:
a-1,变成a-1---3
b-3,变成b-3---3

有两个" - ",就多加一个" - "符号,如:
e--3,变成e---3
f--2,变成f---3

如果以上会出现重名的话,还要加上数字.如:
d--2,要变成d1---3
d---3,不变化

2007-9-5 12:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 11 楼』:  

!T!为连接符
!a!为设定的数量
放在txt文件目录下运行,重复运行不会追加。
连接符个数不能判定,不过能判定超过三个与小于三个,基本上算是达到要求了
@echo off
setlocal enabledelayedexpansion
set T=---
set a=3
for /f "delims=" %%i in ('dir /b *.txt') do (
for /f "tokens=1,2* delims=-" %%d in ('dir /b "%%i"') do (
  set /a n=0
  set oldn="%%i"
  set newn0=%%~nd
  set newn1="%%~nd!T!!a!.txt"
  if not !oldn!==!newn1! (
   if exist !newn1! (call :anum) else (
    ren !oldn! !newn1!
   )
  )
)
)
goto :end
:anum
set /a n+=1
set newn2="!newn0!!n!!T!!a!.txt"
if exist !newn2! (goto :anum) else (
  ren !oldn! !newn2!
)
goto :eof
:end
goto :eof
[ Last edited by wxcute on 2008-2-12 at 05:22 AM ]

2008-2-12 05:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 12 楼』:  

测试文件
-------------------
原文件|目标文件
========
a.txt|a---3.txt
b.txt|b---3.txt
c-----3.txt|c---3.txt
a a.txt|a a---3.txt

d.txt|d2---3.txt
d---3.txt|d---3.txt
d1---3.txt|d1---3.txt

e.txt|e1---3.txt
e---3.txt|e---3.txt
e1.txt|e11---3.txt

f---2.txt|f---3.txt
g--3.txt|g---3.txt
h--2.txt|h---3.txt
i----4.txt|i---3.txt

j---.txt|j---3.txt
k--.txt|k---3.txt
l----.txt|l---3.txt

2008-2-12 05:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  

2007-9-5 12:06……

隔了好久啊~

2008-2-12 07:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 14 楼』:  

是阿,我一直在努力学习。今天又碰到这个问题,所以着手解决它。

2008-2-12 08:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 15 楼』:  

楼主你搞这个做什么用啊,能否说说

2008-2-12 12:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: