中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-08 07:18
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 把文本内容横列变纵列。 查看 1,804 回复 17
16 发表于 2008-04-23 22:39 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-4-23 22:35:
仔细看了下5楼的代码,201个字符循环了51次,那么是否可以这样呢?
:

@echo off&setlocal enabledelayedexpansion
set /p str=<a.txt
for /l %%i in (1 1 51) do ( ...

是精简了,但我们不会知道有多少个字符啊,我都是考虑其通用性写的。
批处理之家新域名:www.bathome.net
17 发表于 2008-04-23 23:44 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
我是这样写的

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (t.txt) do (
set "str=%%i"
for /l %%i in (0,1,3) do call :lp
)
pause
goto :eof
:lp
set str1=!str:~%n%,1!
set str2=!str2!!str1!
if defined str1 set/a n+=4&goto lp
set n=&echo !str2!
set str2=

还可以简化 可以少循环一次:

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (t.txt) do (
set "str=%%i"
for /l %%i in (3,-1,1) do call :lp %%i
echo !str!
)
pause
goto :eof
:lp
set/a m=n+1
set str1=!str:~%n%,1!
set str=!str:~0,%n%!!str:~%m%!
set str2=!str2!!str1!
if defined str1 set/a n+=%1&goto lp
set n=&echo !str2!
set str2=


[ Last edited by terse on 2008-4-24 at 12:30 AM ]
简单!简单!再简单!
18 发表于 2008-04-24 17:26 ·  中国 江苏 南通 电信
初级用户
积分 30
发帖 15
注册 2008-04-21 18:11
18年会员
UID 116522
性别 男
状态 离线
谢谢,长见识了。
论坛跳转: