标题: [文本处理] 批处理实现中文段落横排转竖排 [打印本页]
作者: hanyeguxing 时间: 2010-12-8 16:00 标题: 批处理实现中文段落横排转竖排
文本要求:为了美观,所有字符均为中文全角字符。
样本:- 将进酒 李白
- 君不见,黄河之水天上来,奔流到海不复回。
- 君不见,高堂明镜悲白发,朝如青丝暮成雪。
- 人生得意须尽欢,莫使金樽空对月。
- 天生我材必有用,千金散尽还复来。
- 烹羊宰牛且为乐,会须一饮三百杯。
- 岑夫子,丹丘生,将进酒,杯莫停。
- 与君歌一曲,请君为我侧耳听。
- 钟鼓馔玉不足贵,但愿长醉不复醒。
- 古来圣贤皆寂寞,唯有饮者留其名。
- 陈王昔时宴平乐,斗酒十千恣欢谑。
- 主人何为言少钱,径须沽取对君酌。
- 五花马,千金裘,呼儿将出换美酒,
- 与尔同销万古愁。
复制代码
从左向右排列:- @echo off&setlocal enabledelayedexpansion
- set var=1.txt
- for /f "delims=" %%a in (%var%) do call:han "%%a"
- for /l %%a in (1,1,%Ye%) do set Xing= !Xing!
- for /f "delims=" %%a in (%var%) do (
- set Han=%%a%Xing%
- for /l %%b in (0,1,%Ye%) do set #%%b=!#%%b! !Han:~%%b,1!
- )
- set/a Ye-=1
- for /l %%a in (0,1,%Ye%) do echo !#%%a!
- pause
- :han
- set Han=%~1
- if defined Ye (set Gu=%Ye%) else set Gu=0
- :ye
- if "!Han:~%Gu%,1!"=="" (
- if "%Ye%"=="" set Ye=%Gu%
- if %Gu% gtr %Ye% set Ye=%Gu%
- goto:eof
- )
- set/a Gu+=1
- goto:ye
复制代码
效果: 君 君 人 天 烹 岑 与 钟 古 陈 主 五 与
不 不 生 生 羊 夫 君 鼓 来 王 人 花 尔
见 见 得 我 宰 子 歌 馔 圣 昔 何 马 同
将 , , 意 材 牛 , 一 玉 贤 时 为 , 销
进 黄 高 须 必 且 丹 曲 不 皆 宴 言 千 万
酒 河 堂 尽 有 为 丘 , 足 寂 平 少 金 古
之 明 欢 用 乐 生 请 贵 寞 乐 钱 裘 愁
李 水 镜 , , , , 君 , , , , , 。
白 天 悲 莫 千 会 将 为 但 唯 斗 径 呼
上 白 使 金 须 进 我 愿 有 酒 须 儿
来 发 金 散 一 酒 侧 长 饮 十 沽 将
, , 樽 尽 饮 , 耳 醉 者 千 取 出
奔 朝 空 还 三 杯 听 不 留 恣 对 换
流 如 对 复 百 莫 。 复 其 欢 君 美
到 青 月 来 杯 停 醒 名 谑 酌 酒
海 丝 。 。 。 。 。 。 。 。 ,
不 暮
复 成
回 雪
。 。
从右向左排列:把 set #%%b=!#%%b! !Han:~%%b,1! 改成 set #%%b=!Han:~%%b,1! !#%%b!
效果:与 五 主 陈 古 钟 与 岑 烹 天 人 君 君
尔 花 人 王 来 鼓 君 夫 羊 生 生 不 不
同 马 何 昔 圣 馔 歌 子 宰 我 得 见 见
销 , 为 时 贤 玉 一 , 牛 材 意 , , 将
万 千 言 宴 皆 不 曲 丹 且 必 须 高 黄 进
古 金 少 平 寂 足 , 丘 为 有 尽 堂 河 酒
愁 裘 钱 乐 寞 贵 请 生 乐 用 欢 明 之
。 , , , , , 君 , , , , 镜 水 李
呼 径 斗 唯 但 为 将 会 千 莫 悲 天 白
儿 须 酒 有 愿 我 进 须 金 使 白 上
将 沽 十 饮 长 侧 酒 一 散 金 发 来
出 取 千 者 醉 耳 , 饮 尽 樽 , ,
换 对 恣 留 不 听 杯 三 还 空 朝 奔
美 君 欢 其 复 。 莫 百 复 对 如 流
酒 酌 谑 名 醒 停 杯 来 月 青 到
, 。 。 。 。 。 。 。 。 丝 海
暮 不
成 复
雪 回
。 。
if defined Ye (set Gu=%Ye%) else set Gu=0 的作用是加速子命令循环
[ 本帖最后由 hanyeguxing 于 2010-12-8 16:07 编辑 ]
作者: sxw 时间: 2010-12-8 17:03 标题: 回复 1楼 的帖子
Hanyeguxing能讲解一下代码吗?
比如#号怎么用啊?
作者: hanyeguxing 时间: 2010-12-8 18:55
原帖由 sxw 于 2010-12-8 17:03 发表
Hanyeguxing能讲解一下代码吗?
比如#号怎么用啊?
本代码是可以不用#的。
有些时候,我们需要将某些字符串定义为变量,但这些字符串有可能和本已经存在的环境变量冲突,或和默认的环境变量冲突。
例如 for /f in (1.txt) do set %%a=0
如果 %%a 可能为var,而var这个变量名在这之前被使用过,这样就造成了问题
再如 %%a 可能为tmp,而tmp这个变量名是默认的环境变量名,将直接造成%tmp%的变更。
而一般情况下,环境变量中,不会使用#、@等字符开头的变量名,所以加上这样的字符可避免变量名的冲突。
至于习惯上把这个字符加在前面,是为了set # 时调试时或使用时的方便。
作者: sxw 时间: 2011-3-6 14:36
he,看不懂,不知道是怎样的思路.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |