Board logo

标题: (求助)如何编写一个.bat文件实现文件更名批处理 [打印本页]

作者: tommy725     时间: 2007-3-31 18:11    标题: (求助)如何编写一个.bat文件实现文件更名批处理

我遇到一个问题,比如,我有几百个.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 ]
作者: slore     时间: 2007-3-31 18:18
!a: =-!
作者: bjsh     时间: 2007-3-31 22:44
这个

  Quote:

  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 ]
作者: zzhh612     时间: 2007-3-31 23:12    标题: 上面的答案试了一下,没成功.

有待改进工作
作者: bjsh     时间: 2007-4-1 00:35
我自己试着怎么没问题呢??

ls的说一下出错信息
作者: tommy725     时间: 2007-4-1 05:59
非常谢谢bjsh,我试一下看看.不过我还是看不懂,你如果能给我解释一下每句的含义或者功能,那就更加感谢了.
作者: flyinspace     时间: 2007-4-1 07:49
for /f "delims=" %%a in ('dir /b /a *.pdf') do set "old_name=%%a" &call :re_name

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

('dir /b /a *.pdf')里面的参数是不是只会执行一次?然后把把所有变量放内存里?等程序一个一个的读取?
当里面读取的内容非常多的时候。会不会造成机器假死?
作者: huzixuan     时间: 2007-4-1 08:50
刚才写错了.

@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 ]
作者: tommy725     时间: 2007-4-1 17:43
谢谢大家,我可不可以这样测试啊,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
作者: bjsh     时间: 2007-4-1 22:49
直接运行我写的那个;也出现这种错误吗???
作者: wuwuwuming     时间: 2007-4-1 23:05
好是好,可是看不懂,真是郁闷~~~~
作者: tommy725     时间: 2007-4-2 19:54
我运行了
@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.
作者: qingfushuan     时间: 2007-4-2 21:56    标题: 试试这个

我刚才写的,经测试可以更名的

@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了,这样子将就用可以了不
作者: tommy725     时间: 2007-4-2 22:35
两个空格是我输入错误,如果可以空格变"-"就可以
作者: kcdsw     时间: 2007-4-2 22:42
ren "* *.pdf"  "*-*.pdf"
作者: tommy725     时间: 2007-4-2 22:50
是我自己对语法不熟悉,输入有误,测试都成功了,谢谢大家.不过大家还有新的方法也可以贴出来比较一下
谢谢

[ Last edited by tommy725 on 2007-4-2 at 09:52 AM ]
作者: acme     时间: 2007-4-13 09:06
好象没有指定路径,可以指定路径吗?
要不怎么知道回更名那些路径下的?
作者: fanglor     时间: 2007-4-13 14:07
set str=!str: =-!

能不能说一下这句是什么意思 啊?

谢谢了!
作者: bjsh     时间: 2007-4-13 21:25
set str=%str: =-%

是把环境变量str中的空格替换为-

比如
set p=14+58+96
set p=%p:+=-%

则执行后 %p% 为14-58-96