Board logo

标题: [文本处理] [已解决]批处理如何在文件名前面加上姓名首字母及年月日星期时分秒? [打印本页]

作者: hotgl001    时间: 2015-11-26 15:14     标题: [已解决]批处理如何在文件名前面加上姓名首字母及年月日星期时分秒?

本帖最后由 hotgl001 于 2015-11-27 14:33 编辑

如何在文件名前面加上姓名首字母及前当的 年月日星期时分秒
如有以下文件:
1235534张三2345.eml
ru39李四9683d.eml
姓名前后的内容不固定

想改成以下格式:
zs 2015年11月26号 星期4 15点4分52秒 1235534张三2345.eml
ls 2015年11月26号 星期4 15点5分7秒 ru39李四9683d.eml

谢谢
作者: dizimotong    时间: 2015-11-27 00:25

本帖最后由 dizimotong 于 2015-11-27 10:35 编辑

回复 1# hotgl001
  1. @echo off
  2. for /f "tokens=1-4 delims=/-周 " %%i in ('date /t') do set Date=%%i年%%j月%%k号 星期%%l
  3. for /f "tokens=1,2 delims=:" %%i in ('time /t') do set Time=%%i时%%j分
  4. for /f "tokens=*" %%i in ('dir /b *eml') do (
  5. ren "%%i" "%Date% %Time% %%i"
  6. )
复制代码

作者: hotgl001    时间: 2015-11-27 08:41

本帖最后由 hotgl001 于 2015-11-27 08:43 编辑

回复 2# dizimotong


    谢谢,你的方法解决了日期时间,但最主要的是根据姓名,在前缀加上姓名的首字母。而且文件名中会有别的汉字。另外文件名中有空格,这个批处理就不能用了。
作者: pcl_test    时间: 2015-11-27 09:32

回复 3# hotgl001


    那么你说下,区分/提取姓名的依据是什么?
作者: hotgl001    时间: 2015-11-27 09:58

回复 4# pcl_test


    可以把我需要的姓名都放文件里,类似字典吧好象。再把文件名里的内容和字典对比,如果有对应的姓名,就在前面加首字母。可能是这样的思路吧,我也不懂。嘿嘿
先谢啦
作者: hotgl001    时间: 2015-11-27 10:02

@echo on

set d=%date:~0,4%年%date:~5,2%月%date:~8,2%日_星期%date:~12,2%_
set t=%time:~0,2%点%time:~3,2%分%time:~6,2%秒_
for /f %%i in ('dir /b *张三*.eml') do ( ren "%%i" "ZS %Date% %Time% %%i"
for /f %%i in ('dir /b *李四*.eml') do ( ren "%%i" "LS %Date% %Time% %%i"
)

这是我目前做的,但人名有4、500,运行起来有点慢,而且原文件名中带空格的话命令就无效了。不知是否有更好的方法。谢谢
作者: hotgl001    时间: 2015-11-27 10:09

回复 2# dizimotong

再请问如何加秒  谢谢
作者: dizimotong    时间: 2015-11-27 10:20

回复 7# hotgl001

二楼代码已改,能够处理文件名有空格的情况,但是关于加上姓名首字母和时间的秒数上,暂时没有思路
作者: flyinnet9    时间: 2015-11-27 10:48

把你的字典做出来,格式像这样
张三 zs
李四 ls
  1. @echo off
  2. set d=%date:~0,4%年%date:~5,2%月%date:~8,2%日_星期%date:~12,2%_
  3. set t=%time:~0,2%点%time:~3,2%分%time:~6,2%秒_
  4. for /f "tokens=1,2 delims= " %%a in (字典.txt) do (
  5.   for /f %%i in ('dir /b *%%a*.eml') do ren "%%i" "%%b %d% %t% %%i"
  6. )
复制代码

作者: hotgl001    时间: 2015-11-27 11:13

回复 9# flyinnet9

谢谢,你的方法和我的差不多,还是需要循环所有的人名。
不知是否可以直接先提取第一个eml文件名,然后用文件名对比字典,如果有符合的再改名。这样会不会更快些。
作者: flyinnet9    时间: 2015-11-27 11:25

回复 10# hotgl001


    张三喜洋洋和灰太狼.txt

   要提取张三?喜洋洋?灰太狼?还是喜洋洋和灰太狼?或者张三喜洋洋?。。。。

  归根结底,计算机并不知道什么是人名
作者: hotgl001    时间: 2015-11-27 12:29

回复 11# flyinnet9

刚才说了可以建个字典,把姓名加进去
作者: aa77dd@163.com    时间: 2015-11-27 12:48

从汉字串中识别出姓名 是 人工智能 语言理解的范畴了.
简单的代码只能做到 字典匹配
作者: CrLf    时间: 2015-11-27 15:45

回复 13# aa77dd@163.com


就楼主的例子而言,可以这样:
  1. for /f "delims=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ." %%a in (a.txt) do echo %%a
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2