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

【练习-023】按要求替换文本字符的批处理

[复制链接]
发表于 2009-5-19 21:34:28 | 显示全部楼层

回复 5楼 的帖子

shift用法妙,但call :lp进行循环,效率可能不高吧!
发表于 2009-5-19 23:13:26 | 显示全部楼层
::要想高效,利用变量定义,尽量减少循环体内的代码!

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (3300,1,3315) do (
  3. set #a=%%a
  4. for /l %%b in (1,1,9) do (set %%a0%%b=20!#a:~2,2!年%%b月)
  5.         for %%b in (10 11 12) do (set %%a%%b=20!#a:~2,2!年%%b月)
  6. )
  7. for /f "tokens=*" %%a in (a.txt) do (
  8.     for /f "tokens=1-3 delims=-" %%b in ("%%a") do (echo !%%b!--!%%c!--!%%d!)
  9. )
  10. echo.&pause

复制代码
发表于 2009-5-20 00:05:23 | 显示全部楼层

回复 17楼 的帖子

netbenton兄的想法实在是妙,效率也高,但是付出了内存的代价!
如果这样的数很多,占用内存会很大。
发表于 2009-5-20 07:38:12 | 显示全部楼层
当然,如果数很多占用内存就多,
就本题而言,仅仅为:年数*12而已,就算是跨100年,也不过1200个变量定义。
在具体使用时,就要看实际情况了,如果“定义体”比“循环体”要大,则不应该使用变量定义。
发表于 2009-6-13 13:59:31 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=-" %%a in (a.txt) do (
  3.     set/a y1=%%a/100,y1-=1300,m1=%%a%%100,y2=%%b/100,y2-=1300,m2=%%b%%100,y3=%%c/100,y3-=1300,m3=%%c%%100
  4.     echo !y1!年!m1!月--!y2!年!m2!月--!y3!年!m3!月
  5. )
  6. pause
复制代码

评分

参与人数 1PB +3 收起 理由
curious + 3 纯数学解决,实在是高!

查看全部评分

发表于 2009-6-13 17:20:59 | 显示全部楼层
sed s/330/200/g;s/--/\n/g a.txt|sed "s/200./&年/;s/$/月/;s/年0/年/"|sed N;N;s/\n/--/|sed N;s/\n/--/
其实允许2009年01月形式的话,会少很多代码而且格式也工整。
发表于 2009-6-13 21:11:12 | 显示全部楼层
我这代码效率不高,仅能做对而已
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=--"  %%i in (a.txt) do (
  3. call :aa %%i
  4. call :aa %%j
  5. call :aa %%k
  6. echo !b:~2!
  7. set b=
  8. )
  9. pause>nul
  10. goto :eof
  11. :aa
  12. set a=%1
  13. set a=!a:330=200!
  14. set a1=!a:~0,4!年
  15. set a2=!a:~-2!
  16. if !a2! lss 10 (set a2=!a2:~-1!) else (set a2=!a2:~-2!)
  17. set a=!a1!!a2!月
  18. set b=!b!--!a!
复制代码

评分

参与人数 1PB +5 收起 理由
keen + 5 效率的确不高,可以再该进!

查看全部评分

发表于 2021-10-13 10:20:29 | 显示全部楼层

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f %%i in (a.txt) do (
  4.     set str=%%i
  5.     set str=20!str:~2,2!年!str:~4,2!月--20!str:~10,2!年!str:~12,2!月--20!str:~18,2!年!str:~20,2!月
  6.     echo !str:年0=年!
  7. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:39 , Processed in 0.019136 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表