[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助批处理按照字符串的长度来分段读取并把日期数字转换为单词

看了delims= 和 tokens= 的命令, 请问能不能按照字符串的长度来分段读取?比如我有一批照片,文件名是2009032901这样的格式,我想把它分成2009,03,29和01,然后把03替换成March,把29替换成29th,吧01替换成Morning。

你的文件名都是10位数字的吗?不多也不少?
“把03替换成March” 那么04 又替换为什么呢?最好把7个都写全 ^_^ 不懂英文
“把01替换成Morning”那么02呢?03呢?99呢?
技术问题请到论坛发帖求助!

TOP

1-4位是年份,这个不变,5-6位是月份,需要把数字替换成对应的英文的月份,7-8位是日期,需要加上st,nd,rd或者th,9-10位是一天中的不同时段,只有01,02,03和04

TOP

楼主一次性多给些信息不行吗?都说了不懂英文。
5-6位是月份,需要把数字替换成对应的英文的月份 请给出英文的1-12月
7-8位是日期,需要加上st,nd,rd或者th  请说明什么情况下加st、什么情况下加 nd。。。
9-10位是一天中的不同时段,只有01,02,03和04 请问01替换为Morning、02替换为什么?03、04呢?
技术问题请到论坛发帖求助!

TOP

不好意思。

1月:January,2月:February,3月:March,4月:April,5月:May,6月:June,7月:July,8月:Aguest,9月:September,10月:October,11月:November,12月:December

1st 2nd 3rd 4th 5th 6th 7th 8ht 9th 10th 11th 12th 13th 14th 15th 16 th 17th 18th 19th 20th 21st 22nd 23rd 24th 25th 26th 27th 28th 29th 30th 31st

01=Morning, 02=Noon, 03=Evening, 04=Midnight

TOP

基本明白了,只有日期的没找到规律,到底什么情况下才是 th
只好用最笨的办法了。
假设你的照片都是jpg格式。
:
  1. @echo off&setlocal enabledelayedexpansion
  2. set m=January February March April May June July
  3. set m=%m% Aguest September  October November December
  4. for /l %%a in (1 1 31) do set n=0%%a&set "d!N:~-2!=!N:~-2!th"
  5. for %%a in (01 21 31) do set "d%%a=%%ast"
  6. set d02=02nd&set "d22=22nd"
  7. set d03=03rd&set "d23=23rd"
  8. set /a n=100
  9. for %%a in (%m%) do (set /a n+=1&set m!n:~-2!=%%a)
  10. set s01=Morning&set s02=Noon&set s03=Evening&set "s04=Midnight"
  11. for /f "delims=" %%a in ('dir/b/a-d *.jpg') do (
  12.    set "n=%%~na"
  13.    call echo ren "%%a" "!n:~0,4! %%m!n:~4,2!%% %%d!n:~6,2!%% %%s!n:~8,2!%%%%~xa"
  14. )
  15. pause
复制代码

[ 本帖最后由 随风 于 2009-3-29 17:43 编辑 ]
技术问题请到论坛发帖求助!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (January.401 February.402 March.403 April.404 May.405 June.406 July.407 Aguest.408 September.409 October.410 November.411 September.412 1st.601 2nd.602 3rd.603 4th.604 5th.605 6th.606 7th.607 8ht.608 9th.609 10th.610 11th.611 12th.612 13th.613 14th.614 15th.615 16th.616 17th.617 18th.618 19th.619 20th.620 21st.621 22nd.622 23rd.623 24th.624 25th.625 26th.626 27th.627 28th.628 29th.629 30th.630 31st.631 Morning.801 Noon.802 Evening.803 Midnight.804) do set %%~xa=%%~na
  3. for /f "delims=" %%a in ('dir /a-d/b "*.jpg"') do (
  4.   set n=%%~na
  5.   for /f "tokens=1-3" %%1 in (".4!n:~4,2! .6!n:~6,2! .8!n:~8,2!") do (
  6.     ren "%%a" "!n:~,4! !%%1! !%%2! !%%3!%%~xa"
  7.   )
  8. )
复制代码

[ 本帖最后由 tireless 于 2009-3-29 17:53 编辑 ]

TOP

哇!好崇拜你啊!只是最后似乎多了一个“echo”?我去掉就能重命名了。

我以为编程的人英语都很好的。^^ 除了11,12和13,其他的情况下,尾数是1就跟st,尾数是2就跟nd,尾数是3就跟rd,其他情况下都跟th,这是初中英语的内容,呵呵 !

再次感谢!!!!!

TOP

回复 8楼 的帖子

通常给别人的代码都是测试代码,为防代码有误导致不必要的麻烦,所以一般都加上echo只起到演示作用,确定无误后,删除echo就可以正确执行。
bat 应该不算编程,26个字母分开来我倒是认识,合在一起就它认识我,我不认识它了。
编写bat代码和英文没有必然联系。
另:6楼代码有一处笔误,23应该是rd 写成了nd 以改正。

[ 本帖最后由 随风 于 2009-3-29 17:44 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 7楼 的帖子

看着这样的代码就头晕了...

TOP

回复 10楼 的帖子

哪里不懂就问,会有人给你解释的
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表