中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求一批量改文件名的脚本 上一主题 | 下一主题
fjzzgxwb
新手上路





积分 13
发帖 6
注册 2006-12-1
状态 离线
『楼 主』:  求一批量改文件名的脚本

谢谢,例如:(A是一个常量,B是变量)
      
      A123.txt  改名之后-------->     123.txt
     
      A456.txt  改名之后--------->    456.txt

      A999.txt  改名之后--------->    999.txt

ps: (说白了,也就是把A这个常量去掉,:)

还要做到可以扫整个盘。

谢谢了:P:P~~~

2006-12-1 09:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  A这个常量如果是固定长度的话,则可以考虑通过字符截取操作把A去掉;如果长度不固定的话,则用 set var=!str1:A=! 的格式勉强可行,前提是:在同一文件名中,A这个字符串不和其余部分有重合。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-1 09:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fjzzgxwb
新手上路





积分 13
发帖 6
注册 2006-12-1
状态 离线
『第 3 楼』:  

嗯,版主好热心啊,谢谢。
这里的A,我要用到字符串的。。后面的就是例如    [www.163.com]
版主能否帮忙写下批脚本?

2006-12-1 09:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  给你两段演示代码:
@echo off
:: 使用把指定字符串置换为空的方法
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
    set var=%%i
    set var=!var:[www.163.com]=!
    echo %%i 改名后为 !var!
)
pause

@echo off
:: 使用抛弃固定长度字符串的方法
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
    set var=%%i
    echo %%i 改名后为 !var:~13!
)
pause
  test.txt的内容为:
[www.163.com]123.txt
[www.163.com]a bc.txt
[www.163.com]d  e7f89.txt




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-1 11:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 5 楼』:  

电视剧改名,不是很完美
@echo off
setlocal enabledelayedexpansion
echo 默认修改后文件名为01.rm
pause
set  newname=01.rm
:set /p oldname=请输入旧的文件名:
:set /p newname=请输入新的文件名:
set /p num=请输入共几集:
for /f "tokens=1,2 delims=." %%i in ("%newname%") do (
     set newname1=%%i
     set newname2=%%j
     )   
if "%newname1:~0,1%"=="0" set newname1=%newname1:~1%
:loop
for %%i in (*.*) do (echo %%i |find "0%newname1%" && move %%i 0%newname1%.%newname2%)
if "%newname1%"=="%num%" goto :eof
set /a newname1=%newname1%+1
goto loop

2006-12-2 06:45
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 6 楼』:  

test

[ Last edited by a9319751 on 2006-12-5 at 04:41 AM ]

2006-12-2 07:31
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
fjzzgxwb
新手上路





积分 13
发帖 6
注册 2006-12-1
状态 离线
『第 7 楼』:  

谢谢版主及楼上这位朋友的热心帮助,谢谢大家的关注。

我呢,注册本论坛就马上发求助的贴,还真有点不好意思。其实我想要这个批处理确实是想改电影名称的。。。呵呵~~一个一个名字的改,工作量很大,本人批处理又不会。。无奈~

我试下了,版主的批处理可以做到改名了,不过还要局限于我们列出的名字。。。

倘若我们事先不知道我们电脑里多少个这样带有固定符号[www.163.com]呢

这样就不方便了。

楼上这位朋友的批处理也还是不够。。

请会的朋友帮忙加以完善下,不甚感激。。。

2006-12-2 17:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  那就得把你的所有条件全部罗列出来,光说替换A常量,但是又不给出所有可能的情况的话,我只能给演示代码了。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-2 20:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fjzzgxwb
新手上路





积分 13
发帖 6
注册 2006-12-1
状态 离线
『第 9 楼』:  

版主这么早就来了,呵呵。不好意思,怪我没把问题说清楚。

我想要的效果就是:运行批处理后,首先会让用户输入定义常量A[www.163.com],

(因为有的电影不单是一个地址下的,所以会不一样),然后就是用批处理把带有

[www.163.com]的这个量去掉,而不能出现覆盖提示的现象(如能更明确地显示出这

次我们究竟改了多少个文件名,在C盘下生成个ren.txt,记录下,最佳),还要过滤我的

电脑里的所有文件,如 C,D,E,F盘。。。

情况就是这样子,再次感谢!

2006-12-2 23:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fjzzgxwb
新手上路





积分 13
发帖 6
注册 2006-12-1
状态 离线
『第 10 楼』:  

不好意思,急需这个批处理..请会的朋友帮下忙,谢谢

2006-12-4 01:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 11 楼』:  

文件改名.bat

@echo off
set /p oldname=请输入旧的文件名:
set /p newname=请输入新的文件名:
setlocal enabledelayedexpansion
dir /b . >list.txt
for /f "tokens=1 delims=1" %%i in ("%oldname%") do set name=%%i
if "%name:~-1%"=="0" set name=%name:~0,-1%
if "%name:~-1%"=="0" set name=%name:~0,-1%
if "%name:~-1%"==" " set name=%name:~0,-1%
if "%name:~-1%"==" " set name=%name:~0,-1%
for /f "delims=" %%i in (list.txt) do (
    set var=%%i
    set var=!var:%name%=!
    ren %%i !var!
)
dir /b . >list.txt
for /f "tokens=1,2 delims=1" %%i in ("%oldname%") do set name=%%j
for /f "delims=" %%i in (list.txt) do (
    set var=%%i
    set var=!var:%name%=!
    ren %%i !var!
)
dir /b . >list.txt
for /f "tokens=1,2 delims=." %%i in ("%newname%") do set name=%%j
for /f "delims=" %%i in (list.txt) do echo %%i |find "." || ren %%i %%i.%name%
del list.txt
del %0



生成文件.bat
for /f %%i in (listfile.txt) do copy listfile.txt %%i


listfile.txt
[YYSoR]那年夏天的台风01.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风02.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风03.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风04.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风05.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风06.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风07.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风08.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风09.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风10.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风11.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风12.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风13.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风14.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风15.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风16.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风17.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风18.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风19.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风20.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风21.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风22.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风23.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风24.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风25.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风26.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风27.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风28.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风29.国语中字.d-vb.rmvb
[YYSoR]那年夏天的台风30.国语中字.d-vb.rmvb



使用时把“文件改名.bat”放在要改名的电影的文件夹运行即可,使用前请先备份自己的重要文件

   此帖被 +3 点积分     点击查看详情   
评分人:【 redtek 分数: +3  时间:2006-12-4 08:01


2006-12-4 07:55
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
arjay
新手上路





积分 9
发帖 5
注册 2006-12-3
状态 离线
『第 12 楼』:  

太厉害了,谢谢之中。

2006-12-4 22:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: