中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 请教高手:改文件名 上一主题 | 下一主题
shanyinwx
初级用户





积分 31
发帖 16
注册 2008-2-27
状态 离线
『楼 主』:  请教高手:改文件名

我这里有几千个TXT文件,其文件名都是数字或者字母组合的,如:89u.txt、fsa.txt、tfsd.txt等,很难从一大堆文件中分清楚到底谁是谁,要是逐个地打开查找费时又费力,这样就给查阅带来了很大的不方便,。如果能将文件内容的前10个字符添替换为文件名,起到索引的作用,找起文件来就方便省事多了。但是文件内容大多开头都有空行,所以我想将搜寻内容定在前3行,长度为10个字符(不分中英文),这样文件名就是以文件内容开头的前10个字符组成的,查阅起来就方便多了,
请高手指教我该怎么写这样一个批处理。。

2008-5-7 18:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 2 楼』:  

但是文件内容大多开头都有空行,所以我想将搜寻内容定在前3行。。。。
----------------------------------------------
这句没看懂~~~
应该举个实例
比如 89u.txt中的内容如下:
-----------start here-----------------


1234567890ajfdlaj
asfdafak;adsf
afdk;lfda
--------cut here--------------------
是不是把89u.txt改成1234567890.txt?

2008-5-7 19:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  

for是忽略空行的……

2008-5-7 19:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 4 楼』:  

如果真是这样。。。。试下下面的代码吧
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do (
   set n=0
   for /f "delims=" %%i in (%%a) do (
      set/a n+=1
      if !n! equ 1 set str=%%i&ren %%a !str:~0,10!.txt
)
)
pause
rem 如果行中有特殊字符会出错。。如果两个文件中的第一行的前10个字符一样,也会出错

2008-5-7 19:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 5 楼』:  没测试:


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /s /b *.txt') do (
     call :lp %%i
     for /f "delims=" %%j in ('dir /s /b *.txt') do if "%%~nj"=="!name!" set name=!name!%random:~,1%
ren "%%~dpnxi" "!name!.txt"
)
echo 改名全部完成!
pause>nul&goto :eof
:lp
for /f "delims=" %%i in (%~dpnx1) do (
     set a=%%i
     if not "!a:~10!"=="" set name=!a:~,10!&goto :eof
)
[ Last edited by zw19750516 on 2008-5-7 at 10:09 PM ]



批处理之家新域名:www.bathome.net
2008-5-7 21:13
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /s /b *.txt') do (
   set "name="
   for /f "delims=" %%a in ('type "%%i"') do (
      if not defined name set "name=%%a"
   )
   ren "%%i" "!name:~-10!%%~xi"
)
echo 改名全部完成!
pause>nul




致精致简!
2008-5-7 21:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shanyinwx
初级用户





积分 31
发帖 16
注册 2008-2-27
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by pusofalse at 2008-5-7 07:08 PM:
但是文件内容大多开头都有空行,所以我想将搜寻内容定在前3行。。。。
----------------------------------------------
这句没看懂~~~
应该举个实例
比如 89u ...

对,就是这样

2008-5-8 00:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by shanyinwx at 2008-5-8 12:43 AM:

对,就是这样

OK 那就用我那代码吧  但第一行的前十个字符中如果有特殊字符的话,不能保证不会出错

2008-5-8 00:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shanyinwx
初级用户





积分 31
发帖 16
注册 2008-2-27
状态 离线
『第 9 楼』:  

谢谢各位高手。。

2008-5-8 00:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shanyinwx
初级用户





积分 31
发帖 16
注册 2008-2-27
状态 离线
『第 10 楼』:  

但是现在我又发现了一个问题:还有很多的文件内容在开头的几行是相同的,这样就只能命名一个文件,而其他的文件则不能改名,改怎么办,再次请教高手?能不能在这些文件名的后面加个数字或者什么的来区分呢?

[ Last edited by shanyinwx on 2008-5-8 at 01:29 AM ]

2008-5-8 01:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by shanyinwx at 2008-5-8 01:03 AM:
但是现在我又发现了一个问题:还有很多的文件内容在开头的几行是相同的,这样就只能命名一个文件,而其他的文件则不能改名,改怎么办,再次请 ...

如果存在重名的,就提取文件中第一行的前11个字符作为文件名,其他的仍是前10个。。。。
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do (
   set n=0
   for /f "delims=" %%i in (%%a) do (
      set/a n+=1
      if !n! equ 1 set str=%%i&ren %%a !str:~0,10!.txt>nul 2>nul || ren %%a !str:~0,11!.txt
)
)
pause
[ Last edited by pusofalse on 2008-5-8 at 01:39 AM ]

2008-5-8 01:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  

那就这样,若有重名文件就在后面加序号。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.txt') do (
   set n=0&set "name="
   for /f "delims=" %%a in ('type "%%i"') do (
      if not defined name set "name=%%a"
   )
   if exist "!name:~-10!%%~xi" (call :loop "%%i") else (
      ren "%%i" "!name:~-10!%%~xi"
    )
)
echo 改名全部完成!
pause>nul
exit
:loop
set /a n+=1
if exist "!name:~-10!%n%%~x1" goto loop
ren "%~1" "!name:~-10!%n%%~x1"
goto :eof




致精致简!
2008-5-8 01:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shanyinwx
初级用户





积分 31
发帖 16
注册 2008-2-27
状态 离线
『第 13 楼』:  

非常感谢。。。。。

2008-5-8 06:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: