中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-20 16:30
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 再发逐字符显示批处理(不兼容^""=字符): 查看 789 回复 10
楼 主 再发逐字符显示批处理(不兼容^""=字符): 发表于 2008-05-11 22:14 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@echo off
:begin
cls&set /p str=请输入字符串:
if "%str%"=="" goto begin
for %%i in (^> ^< ^& ^|) do set a=%%i&call :loop
cls&echo 逐字显示开始...&ping /n 2 127.1>nul
cls&echo.
:lp
set /a n+=1
call,set var="%%str:~,%n%%%"
set /p=%var%<nul&ping /n 127.1>nul
for /l %%i in (1,1,100) do set /p=<nul
if not %var%=="%str%" goto lp
cls&set n=0&echo 显示完毕,按任意键继续!&pause>nul&goto begin
:loop
call,set str=%%str:^%a%=^%a%%%


[ Last edited by zw19750516 on 2008-5-12 at 12:36 AM ]
批处理之家新域名:www.bathome.net
2 发表于 2008-05-11 23:56 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
不知楼主是否看过这个帖子

@echo off

:: 逐行逐字阅读文本,并且原样显示文本内容
:: ① 为了显示文本的所有内容,使用了for+findstr的句式
:: ② 为了能原样显示文本,使用变量延迟并在合适的位置终止延迟
:: ③ 为了能正确显示引号和等号,在语句 set /p= !str:~0,1!<nul 中,等号后空一格,并使用退格键

for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
call :pickup
endlocal
)
pause
goto :eof

:pickup
ping -n 1 127.1>nul
if defined str (
set /p= !str:~0,1!<nul
set str=!str:~1!
goto pickup
)
echo.
goto :eof
3 发表于 2008-05-12 00:10 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
&&回hat兄弟,namejm版主的这贴子我不但看过,还借其写了批处理和文本文件阅读器,但请hat兄弟测试下我稍做修改的下面一段代码吧,就能说明问题:

@echo off
:begin
set var=<< >>> &&& |||
for %%i in (%var%) do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
call :pickup
endlocal
)
pause
goto :eof
:pickup
ping -n 1 127.1>nul
if defined str (
set /p= !str:~0,1!<nul
set str=!str:~1!
goto pickup
)
echo.
goto begin
批处理之家新域名:www.bathome.net
4 发表于 2008-05-12 00:56 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
恕我愚笨,没看明白 zw19750516 兄3楼的代码要表达什么意思。
给你的set命令加个双引号可以吗?
5 发表于 2008-05-12 01:01 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
我的意思就是这段代码并不兼容输入的字符串中的&<>|四个特殊字符,不知怎么在文本里还行(估计是for+findstr句式的原因)

[ Last edited by zw19750516 on 2008-5-12 at 01:03 AM ]
批处理之家新域名:www.bathome.net
6 发表于 2008-05-12 01:27 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
这样是否能否满足要求呢?

@echo off
:begin
rem set var=<< >>> &&& |||
cls
set /p var=请输入字符串:
if "%var%"=="" goto begin
for %%i in ("%var%") do (
set "str=%%i"
set "str=%str:~1,-1%"
setlocal enabledelayedexpansion
rem set str=!str:*:=!
call :pickup
endlocal
)
pause
goto :eof
:pickup
ping -n 1 127.1>nul
if defined str (
set /p= !str:~0,1!<nul
set str=!str:~1!
goto pickup
)
echo.
7 发表于 2008-05-12 02:43 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
还是请兄弟再测试。。。
批处理之家新域名:www.bathome.net
8 发表于 2008-05-12 02:45 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
怎么我测试1楼和3楼的代码都不对呢?
我输入的是=<< >>> &&& |||
致精致简!
9 发表于 2008-05-12 02:49 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
3楼是肯定会出错的,但1楼的代码在我这里运行很正常啊
批处理之家新域名:www.bathome.net
10 发表于 2008-05-12 02:54 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
奇怪,我复制粘贴进去就不行,直接输入就可以。。。
致精致简!
11 发表于 2008-05-12 02:57 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
这次呢?

@echo off
:begin
rem set var=<< >>> &&& |||
cls
set /p var=请输入字符串:
if "%var%"=="" goto begin
for /f "delims=" %%i in ("%var%") do (
set "str=%%i"
setlocal enabledelayedexpansion
rem set str=!str:*:=!
call :pickup
endlocal
)
pause
goto :eof
:pickup
ping -n 1 127.1>nul
if defined str (
set /p= !str:~0,1!<nul
set str=!str:~1!
goto pickup
)
echo.
论坛跳转: