标题: [文本处理] 批处理怎样把日期月份替换成中文汉字? [打印本页]
作者: FIR1987 时间: 2011-5-6 10:04 标题: 批处理怎样把日期月份替换成中文汉字?
用以下代码- @echo off
- set year=%date:~0,4%
- set month=%date:~5,2%
- set day=%date:~8,2%
- set /a yesterdayb=daya-1
- echo %year% %month% %yesterday%
- pause
复制代码
当前显示 2011 5 5
我想得到 2011 五月 5 这样的数据 请问有什么办法吗
五月是指当月- set /a n=100
- for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n=n+month&set "!n:~1!=%%a月"
复制代码
这句话不知道怎么才能用上 是不是要if判断?多谢
作者: hucuibai 时间: 2011-5-6 11:18
- @echo off
- 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 (echo %year% %%a月 %yesterday%)
-
- 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 - @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
复制代码
作者: hanyeguxing 时间: 2011-5-6 18:53
本帖最后由 hanyeguxing 于 2011-5-6 18:59 编辑
全部替换为汉字:- @echo off&setlocal enabledelayedexpansion&set Y=〇一二三四五六七八九
- for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set M=%%a%%b%%c
- for /l %%a in (0,1,7) do call set D=!D!%%Y:~!M:~%%a,1!,1%%
- 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号?完整的批处理应该是- @echo off
- 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)"
- for /f "tokens=%M%" %%a in ("一 二 三 四 五 六 七 八 九 十 十一 十二") do set statdate=%D% %%a月 %Y%
- 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)
全部转换为汉字,则是:- @echo off
- 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=〇一二三四五六七八九
- setlocal enabledelayedexpansion
- for /l %%a in (0,1,7) do call set E=!E!%%K:~!M:~%%a,1!,1%%
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |