Board logo

标题: [求助]批处理批量重命名同一目录下的"*.txt"文件 [打印本页]

作者: wxcute     时间: 2007-9-4 13:39    标题: [求助]批处理批量重命名同一目录下的"*.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 ]

作者: slore     时间: 2007-9-4 13:43
"delims=-"

作者: wxcute     时间: 2007-9-4 13:49
谢谢,我先看一下 ========== 看了下 部分会提示找不到指定文件,重复运行也会 [ Last edited by wxcute on 2007-9-4 at 01:53 PM ]

作者: slore     时间: 2007-9-4 14:05
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 ]

作者: wxcute     时间: 2007-9-4 14:10
参考了前辈们的作品,稍微改进了一下,可以提示输入数目了 ========== 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 ]

作者: wxcute     时间: 2007-9-4 16:03
slore 你好,用你4楼的方法,其中 ===== d.txt e.txt f---2.txt ===== 改不过来 [ Last edited by wxcute on 2007-9-4 at 04:19 PM ]

作者: slore     时间: 2007-9-4 16:12
f--2.txt你要改成什么?不说说本身已经是了就不变麽?多次运行不追加麽? 我是测试过的……

作者: wxcute     时间: 2007-9-4 16:21
就是当我设数目为3的时候,要把2变成3 还要谢谢你还帮我测试,你真是个好人 我的题目有点儿复杂,可能会很麻烦,你再仔细看下 1楼 题目 [ Last edited by wxcute on 2007-9-4 at 04:24 PM ]

作者: slore     时间: 2007-9-4 16:55
@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个!-

作者: wxcute     时间: 2007-9-5 12:06
还是有问题, 因为" - "这个符号数目最少要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,不变化

作者: wxcute     时间: 2008-2-12 05:21
!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 ]

作者: wxcute     时间: 2008-2-12 05:23
测试文件 ------------------- 原文件|目标文件 ======== 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

作者: slore     时间: 2008-2-12 07:11
2007-9-5 12:06…… 隔了好久啊~

作者: wxcute     时间: 2008-2-12 08:13
是阿,我一直在努力学习。今天又碰到这个问题,所以着手解决它。

作者: pinghu     时间: 2008-2-12 12:15
楼主你搞这个做什么用啊,能否说说

作者: wxcute     时间: 2008-2-13 00:43
哦,这个呀。是用来打印用的。 打印机识别三个及以上“-”连接符,而后面的数字就是要打针的份数。 如:a---3.txt,就是把这个文件打印3份。 有人说:“何必这么麻烦,直接点打印三份就好了。” 是阿,如果一个还好说,多了就不行了,所以只好先处理文档,然后拖到相应的文件夹中,如要打三份就放入打三份的文件夹中(而且有的文档今天可能是打两份,明天就可能是打四份了,改来改去很是麻烦的)。要是一个一个改名不是累死了,所以来求助,但所得答案不甚满意,自己来编,边学边改进。昨天终于编了个还行的,呵呵。 看你在论坛也很勤快,交个朋友罢,我已经加你了^_^

作者: terse     时间: 2008-2-13 12:49
第二个FOR不要DIR了 @echo off for /f "tokens=*" %%i in ('dir /b /a-d *.txt') do call :lp "%%~ni" pause goto :eof :lp set n= setlocal EnableDelayedExpansion for /f "tokens=1* delims=-" %%i in ("%~1") do ( set fils=%%i set fils1=!fils!---3.txt if "%~1.txt" == "!fils1!" goto :eof if exist "!fils1!" ( :rn set /a n+=1 set fils1=!fils!!n!---3.txt if exist "!fils1!" goto rn ) ) ren "%~1.txt" "!fils1!" [ Last edited by terse on 2008-2-13 at 12:54 PM ]

作者: wxcute     时间: 2008-2-14 00:52
厉害,比我的简单多了。谢谢了。 欣赏你的签名,看来我也要写个签名了。