标题: 修改文件名前缀的问题 
[打印本页]
作者: 26933062     
时间: 2006-12-24 03:45    
标题: 修改文件名前缀的问题
我想批量修改文件名前缀要求如下
原文件名a.txt  b.txt  ll.txt  sds.txt..................有很多
要求:原文件名不变只是在后面加上序号如: a1.txt b2.txt ll3.txt sds4.txt.........size]
作者: lxmxn     
时间: 2006-12-24 04:06
  将此批处理和要处理的文件放在同一个文件夹里面,运行这个批处理即可。
@echo off&setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /a-d/b/s') do (
	if not "%%~ni"=="%~n0" (
	ren "%%i" "%%~ni!a!%%~xi"
	set/a a+=1
	)
)
 
作者: namejm     
时间: 2006-12-24 04:13
  这个序号是按照什么规律加上去的?按照原文件名的字母升序排列依次加的吗?
作者: scriptor     
时间: 2006-12-24 04:13    
标题: 另一个
Originally posted by 26933062 at 2006-12-23 14:45:
我想批量修改文件名前缀要求如下
原文件名a.txt  b.txt  ll.txt  sds.txt..................有很多
要求:原文件名不变只是在后面加上序号如: a
ren.bat
@ echo off
set s=1
dir /b >>filename.txt  :: 将文件名提取
for /f "eol=; delims=.txt," %%a in (filename.txt) do (
(ren %%a.txt %%a%s%.txt ) 
set /a s+=1
)
 pause >nul
刚才看错了
注意这个不能处理空格,哪位帮忙改一下?
 Last edited by scriptor on 2006-12-23 at 03:26 PM ]
 
作者: 26933062     
时间: 2006-12-24 04:20
厉害,太谢谢了,以后多跟你学习.能解释一下红字部分吗?再次谢谢
@echo off&setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /a-d/b/s *.txt') do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)
 Last edited by 26933062 on 2006-12-23 at 03:58 PM ]
作者: ccwan     
时间: 2006-12-24 04:27
大意是如果文件名不是自身(批处理)名称
即不修改自身名称
作者: scriptor     
时间: 2006-12-24 04:46
『第 6 楼』:  
强
不过同一个文件夹里有很多的其他的文件,它照改不误,我改写了以下,让它只针对某类文件:
@echo off&setlocal EnableDelayedExpansion
dir | find ".txt" >name.txt
set a=1
for /f "delims=" %%i in (name.txt) do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)
set/a a+=1 好象不起作用啊??
作者: lxmxn     
时间: 2006-12-24 04:47
  4楼这个局限性太大了。
作者: namejm     
时间: 2006-12-24 04:57
  7楼的代码也并非只针对某一类型的文件,如果文件名取得很特别,它简直就是任何类型通吃呢——只要文件名或后缀名中含有 .txt 都可以,根本原因在于 find 查找字符串的时候,并不能控制字符串出现的位置。
  要针对某种类型的文件,最简洁的还是用 dir 命令,在2楼的基础上稍微改造一下就可以了,比如改成 dir /a-d/b/s *.txt。
作者: scriptor     
时间: 2006-12-24 05:15    
标题: 狂谢
呵呵
我的机器上不能通过
set /a a+=1
怎么回事?
作者: ccwan     
时间: 2006-12-24 05:19
@echo off&setlocal EnableDelayedExpansion
dir | find ".txt" >name.txt
set a=1
for /f "tokens=4 delims= " %%i in (name.txt) do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)
 
作者: ccwan     
时间: 2006-12-24 05:20
你的  dir | find ".txt" >name.txt  命令,生成的name.txt里有空格,以你的代码,会忽略空格后的内容
作者: scriptor     
时间: 2006-12-24 05:30    
标题: 帮忙改正吧
Originally posted by ccwan at 2006-12-23 16:20:
你的  dir | find ".txt" >name.txt  命令,生成的name.txt里有空格,以你的代码,会忽略空格后的内容 
我也不知道怎么改, 帮忙改一下吧!
谢了
 
作者: ccwan     
时间: 2006-12-24 05:35
11楼???
作者: lxmxn     
时间: 2006-12-24 08:45
  上面的 dir | find ".txt" >name.txt 换成 dir /b/a-d *.txt>name.txt 或者 dir /a-d/b|findstr /i ".vbs$" >name.txt的效果应该是一样的。
作者: jmz573515     
时间: 2006-12-24 09:11
'楼主的第一个问题,(VBS写的,只处理当前文件夹)
Set WshShell = WScript.CreateObject("WScript.Shell")
set fso=createobject("scripting.filesystemobject")
on error resume next
set folder=fso.getfolder(WshShell.CurrentDirectory)
set files=folder.files
for each file in files
if lcase(fso.GetExtensionName(file)) ="txt" then
b=b+1
file.name=FSO.GetBaseName(File) & b & ".txt"
end if
next
msgbox "已经将所有txt文件以“基本文件名+序号”的形式命名。",48+4096,"操作完成"
作者: handan     
时间: 2007-11-24 17:25
@echo off
set num=0
for /f "tokens=*" %%i in ('dir /s/b .') do (
set /a num+=1
ren "%%i" "%%~n!num!.txt" 
)
pause
作者: wooglle     
时间: 2010-12-2 12:00
综合楼上各种代码,组合了可以处理带空格文件名的代码
@echo off&setlocal EnableDelayedExpansion 
dir /a-d/b|findstr /i ".jpg" >name.txt 
set a=1 
for /f "delims=" %%i in (name.txt) do (
         if not "%%~ni"=="%~n0" ( 
         ren "%%i" "%%~ni!a!%%~xi" 
         set/a a+=1 
         ) 
) 
del name.txt>nul 2>nul
 
作者: Hanyeguxing     
时间: 2010-12-2 12:17
[code]@echo off&setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir /a-d/b *.jpg') do (
         set/a a+=1
         ren "%%i" "%%~ni!a!%%~xi"
)
这样写就可以。
findstr /i ".jpg"在findstr中,点有特殊意义,所以不能这样写
dir本身就不区分文件名的大小写,可以用dir直接*匹配
既然已经确定匹配.jpg,就不需要if not "%%~ni"=="%~n0" 了。