Board logo

标题: [文本处理] 批处理怎样把日期月份替换成中文汉字? [打印本页]

作者: FIR1987    时间: 2011-5-6 10:04     标题: 批处理怎样把日期月份替换成中文汉字?

用以下代码
  1. @echo off
  2. set  year=%date:~0,4%
  3. set  month=%date:~5,2%
  4. set  day=%date:~8,2%
  5. set  /a yesterdayb=daya-1
  6. echo %year% %month% %yesterday%
  7. pause
复制代码
当前显示 2011 5 5

我想得到 2011 五月 5 这样的数据 请问有什么办法吗
五月是指当月
  1. set /a n=100
  2. for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n=n+month&set "!n:~1!=%%a月"
复制代码
这句话不知道怎么才能用上 是不是要if判断?多谢
作者: hucuibai    时间: 2011-5-6 11:18

  1. @echo off
  2. set  year=%date:~0,4%
  3. set  month=%date:~5,2%
  4. set  day=%date:~8,2%
  5. set  /a yesterday=%day%-1
  6. for /f "tokens=%month% delims= " %%a in ("一 二 三 四 五 六 七 八 九 十 十一 十二") do (echo %year% %%a月 %yesterday%)
  7. pause
复制代码

作者: FIR1987    时间: 2011-5-6 13:10

2# hucuibai
好方法
但是我后面改下的怎么始终没有赋予statdate变量 新的值呢?

@echo off&setlocal enabledelayedexpansion
set  statdate=%date%
set  year=%date:~0,4%
set  month=%date:~5,2%
set  day=%date:~8,2%
set  /a yesterday=%day%-1
for /f "tokens=%month% delims= " %%a in ("一 二 三 四 五 六 七 八 九 十 十一 十二") do (set "!statdate! =%yesterday% %%a月 %year%")
echo %statdate%
pause
作者: hucuibai    时间: 2011-5-6 13:30

3# FIR1987
  1. @echo off&setlocal enabledelayedexpansion
  2. set  statdate=%date%
  3. set  year=%date:~0,4%
  4. set  month=%date:~5,2%
  5. set  day=%date:~8,2%
  6. set  /a yesterday=%day%-1
  7. for /f "tokens=%month% delims= " %%a in ("一 二 三 四 五 六 七 八 九 十 十一 十二") do (set statdate=%yesterday% %%a月 %year%)
  8. echo %statdate%
  9. pause
复制代码

作者: hanyeguxing    时间: 2011-5-6 18:53

本帖最后由 hanyeguxing 于 2011-5-6 18:59 编辑

全部替换为汉字:
  1. @echo off&setlocal enabledelayedexpansion&set Y=〇一二三四五六七八九
  2. for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set M=%%a%%b%%c
  3. for /l %%a in (0,1,7) do call set D=!D!%%Y:~!M:~%%a,1!,1%%
  4. set M=%D:~0,4%年%D:~4,1%十%D:~5,1%月%D:~6,1%十%D:~7,1%日&set M=!M:〇十=!&set M=!M:一十=十!&echo !M:十〇=十!&pause
复制代码

作者: FIR1987    时间: 2011-5-9 10:30

5# hanyeguxing
谢谢 ~~~
另外问下 3楼我写的那个
就是不该用延迟变量我用了 就会出现无法赋新值的问题啊?
作者: hanyeguxing    时间: 2011-5-9 11:18

本帖最后由 hanyeguxing 于 2011-5-9 23:01 编辑

6# FIR1987


你的代码存在太多的错误...
所有批处理语法中声明为数字或数值的地方,都要求必须是十进制、八进制、十六进制的有效数字,08、09为非法无效
1,tokens= 的值必须是十进制、八进制、十六进制的有效数字
2,yesterday=day-1 运算时,day 必须是十进制、八进制、十六进制的有效数字
3,例如 a=1,那么 set %a%=123 或 set !a!=123 ,实际就是set 1=123
当前日期如果为2011年1月1号,那么昨天该是几号?2011年1月0号?完整的批处理应该是
  1. @echo off
  2. set/a "D=1%date:~8,2%-101,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M,M+=!M*12,K=!(M-4)|!(M-6)|!(M-9)|!(M-11),D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)"
  3. for /f "tokens=%M%" %%a in ("一 二 三 四 五 六 七 八 九 十 十一 十二") do set statdate=%D% %%a月 %Y%
  4. echo;%statdate%&pause
复制代码
如果要兼容到1900年等,则把
D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)
改成
D+=!D*(!(M-2)*(28+((!(Y%%4)&!!(Y%%100))|!(Y%%400)))+K*30+(!!(M-2)&!K)*31)
全部转换为汉字,则是:
  1. @echo off
  2. set/a "D=1%date:~8,2%-101,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M,M+=!M*12,K=!(M-4)|!(M-6)|!(M-9)|!(M-11),D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31),M=Y*10000+M*100+D"&set K=〇一二三四五六七八九
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (0,1,7) do call set E=!E!%%K:~!M:~%%a,1!,1%%
  5. set M=%E:~0,4%年%E:~4,1%十%E:~5,1%月%E:~6,1%十%E:~7,1%日&set M=!M:〇十=!&set M=!M:一十=十!&echo !M:十〇=十!&pause
复制代码





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