中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-04 04:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (求助)如何编写一个.bat文件实现文件更名批处理 查看 2,850 回复 18
楼 主 (求助)如何编写一个.bat文件实现文件更名批处理 发表于 2007-03-31 18:11 ·  德国 德国电信(DTAG)
初级用户
积分 36
发帖 14
注册 2007-03-31 17:31
19年会员
UID 83522
性别 男
状态 离线
我遇到一个问题,比如,我有几百个.pdf文件
例如: central aaa 01.pdf
akurss bbs 99.pdf
sskpk p12 980 ok.pdf
airchina lufthansa uk mu500.pdf
92 years anniver.pdf
.........

我想做的是编一个批处理文件xxx.cmd 运行一次可以把以上所有pdf文件中的"空格"自动改为"-". 运行xxx.cmd文件后,以上PDF文件即更名为以下并保存:
central-aaa-01.pdf
akurss-bbs-99.pdf
sskpk-p12-980-ok.pdf
airchina-lufthansa-uk-mu500.pdf
92-years-anniver.pdf
.........
请问如何编写,能否给出列子,谢谢啊

[ Last edited by tommy725 on 2007-4-2 at 06:55 AM ]
2 发表于 2007-03-31 18:18 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
!a: =-!
3 发表于 2007-03-31 22:44 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
这个


  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a *.pdf') do set "old_name=%%a" &call :re_name
  3. goto exit
  4. :re_name
  5. set "new_name=%old_name: =-%"
  6. ren "%old_name%" "%new_name%"
  7. :exit
BJSH发表于: 2007-03-31 09:37


[ Last edited by bjsh on 2007-3-31 at 09:47 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +4 2007-04-01 09:02
4 上面的答案试了一下,没成功. 发表于 2007-03-31 23:12 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
19年会员
UID 67562
性别 男
状态 离线
有待改进工作
5 发表于 2007-04-01 00:35 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
我自己试着怎么没问题呢??

ls的说一下出错信息
6 发表于 2007-04-01 05:59 ·  德国
初级用户
积分 36
发帖 14
注册 2007-03-31 17:31
19年会员
UID 83522
性别 男
状态 离线
非常谢谢bjsh,我试一下看看.不过我还是看不懂,你如果能给我解释一下每句的含义或者功能,那就更加感谢了.
7 发表于 2007-04-01 07:49 ·  中国 广东 广州 荔湾区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
for /f "delims=" %%a in ('dir /b /a *.pdf') do set "old_name=%%a" &call :re_name

对于这一句话?想问个问题?

('dir /b /a *.pdf')里面的参数是不是只会执行一次?然后把把所有变量放内存里?等程序一个一个的读取?
当里面读取的内容非常多的时候。会不会造成机器假死?
知,不觉多。不知,乃求知
8 发表于 2007-04-01 08:50 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
19年会员
UID 69036
性别 男
来自 芜湖
状态 离线
刚才写错了.

@echo off
setlocal enabledelayedexpansion
for %%h in (*.pdf) do (
set str=%%h
set str=!str: =-!
ren "%%h" "!str!")

[ Last edited by huzixuan on 2007-4-1 at 08:54 AM ]
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
9 发表于 2007-04-01 17:43 ·  德国
初级用户
积分 36
发帖 14
注册 2007-03-31 17:31
19年会员
UID 83522
性别 男
状态 离线
谢谢大家,我可不可以这样测试啊,edit file.cmd,然后把代码写进去保存,然后在所在文件夹下运行这个文件.所在文件夹下有三个测试的.pdf文档.但是这个结果怎么出现这个啊:
a duplicate file name exists,or the file can not be found
a duplicate file name exists,or the file can not be found
a duplicate file name exists,or the file can not be found
10 发表于 2007-04-01 22:49 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
直接运行我写的那个;也出现这种错误吗???
11 发表于 2007-04-01 23:05 ·  中国 广东 汕头 电信
初级用户
积分 37
发帖 18
注册 2007-04-01 08:57
19年会员
UID 83600
性别 男
状态 离线
好是好,可是看不懂,真是郁闷~~~~
12 发表于 2007-04-02 19:54 ·  德国
初级用户
积分 36
发帖 14
注册 2007-03-31 17:31
19年会员
UID 83522
性别 男
状态 离线
我运行了
@echo off
for /f "delims= " %%a in ('dir /b/a *.pdf') do
set "old_name=%%a" &call :re_name
goto exit
:re_name
set "new_name=%old_name:=-%"
ren "%old_name%" "%new_name%"
:exit
运行后说命令的语法不正确
the syntax of the command is incorrect.
13 试试这个 发表于 2007-04-02 21:56 ·  中国 四川 绵阳 江油市 电信
高级用户
★★★
积分 502
发帖 327
注册 2006-12-30 06:01
19年会员
UID 74981
性别 男
状态 离线
我刚才写的,经测试可以更名的

@echo off&setlocal enabledelayedexpansion
for /f "delims=." %%a in ('dir /a-d /b *.pdf') do (
set str=%%a
set str=!str: =-!
ren "%%a".pdf !str!.pdf
)
pause


但是你的sskpk p12 980 ok.pdf有两个空格所以更名出来就是

sskpk--p12-980-ok.pdf了,这样子将就用可以了不
14 发表于 2007-04-02 22:35 ·  德国
初级用户
积分 36
发帖 14
注册 2007-03-31 17:31
19年会员
UID 83522
性别 男
状态 离线
两个空格是我输入错误,如果可以空格变"-"就可以
15 发表于 2007-04-02 22:42 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
20年会员
UID 53056
状态 离线
ren "* *.pdf" "*-*.pdf"
论坛跳转: