中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:05
楼 主 修改文件名前缀的问题 发表于 2006-12-24 03:45 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
我想批量修改文件名前缀要求如下
原文件名a.txt b.txt ll.txt sds.txt..................有很多
要求:原文件名不变只是在后面加上序号如: a1.txt b2.txt ll3.txt sds4.txt.........size]
2 发表于 2006-12-24 04:06 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  将此批处理和要处理的文件放在同一个文件夹里面,运行这个批处理即可。

@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
)
)
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
ccwan +5 2006-12-24 04:12
26933062 +2 2006-12-24 04:20
3 发表于 2006-12-24 04:13 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  这个序号是按照什么规律加上去的?按照原文件名的字母升序排列依次加的吗?
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
4 另一个 发表于 2006-12-24 04:13 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
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 ]
5 发表于 2006-12-24 04:20 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
厉害,太谢谢了,以后多跟你学习.能解释一下红字部分吗?再次谢谢
@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 ]
6 发表于 2006-12-24 04:27 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
大意是如果文件名不是自身(批处理)名称
即不修改自身名称
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
7 发表于 2006-12-24 04:46 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
『第 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 好象不起作用啊??
8 发表于 2006-12-24 04:47 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  4楼这个局限性太大了。
9 发表于 2006-12-24 04:57 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  7楼的代码也并非只针对某一类型的文件,如果文件名取得很特别,它简直就是任何类型通吃呢——只要文件名或后缀名中含有 .txt 都可以,根本原因在于 find 查找字符串的时候,并不能控制字符串出现的位置。

  要针对某种类型的文件,最简洁的还是用 dir 命令,在2楼的基础上稍微改造一下就可以了,比如改成 dir /a-d/b/s *.txt。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
ccwan +5 2006-12-24 05:07
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
10 狂谢 发表于 2006-12-24 05:15 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
呵呵

我的机器上不能通过
set /a a+=1

怎么回事?
11 发表于 2006-12-24 05:19 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
@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
)
)
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
12 发表于 2006-12-24 05:20 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
你的 dir | find ".txt" >name.txt 命令,生成的name.txt里有空格,以你的代码,会忽略空格后的内容
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
13 帮忙改正吧 发表于 2006-12-24 05:30 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
Originally posted by ccwan at 2006-12-23 16:20:
你的 dir | find ".txt" >name.txt 命令,生成的name.txt里有空格,以你的代码,会忽略空格后的内容



我也不知道怎么改, 帮忙改一下吧!
谢了
14 发表于 2006-12-24 05:35 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
11楼???
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
15 发表于 2006-12-24 08:45 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  上面的 dir | find ".txt" >name.txt 换成 dir /b/a-d *.txt>name.txt 或者 dir /a-d/b|findstr /i ".vbs$" >name.txt的效果应该是一样的。
论坛跳转: