Board logo

标题: 再发逐字符显示批处理(不兼容^""=字符): [打印本页]

作者: bat-zw     时间: 2008-5-11 22:14    标题: 再发逐字符显示批处理(不兼容^""=字符):


@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 ]
作者: HAT     时间: 2008-5-11 23:56
不知楼主是否看过这个帖子
@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

作者: bat-zw     时间: 2008-5-12 00:10
&&回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

作者: HAT     时间: 2008-5-12 00:56
恕我愚笨,没看明白 zw19750516 兄3楼的代码要表达什么意思。
给你的set命令加个双引号可以吗?
作者: bat-zw     时间: 2008-5-12 01:01
我的意思就是这段代码并不兼容输入的字符串中的&<>|四个特殊字符,不知怎么在文本里还行(估计是for+findstr句式的原因)

[ Last edited by zw19750516 on 2008-5-12 at 01:03 AM ]
作者: HAT     时间: 2008-5-12 01:27
这样是否能否满足要求呢?
@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.

作者: bat-zw     时间: 2008-5-12 02:43
还是请兄弟再测试。。。
作者: 26933062     时间: 2008-5-12 02:45
怎么我测试1楼和3楼的代码都不对呢?
我输入的是=<< >>> &&& |||
作者: bat-zw     时间: 2008-5-12 02:49
3楼是肯定会出错的,但1楼的代码在我这里运行很正常啊
作者: 26933062     时间: 2008-5-12 02:54
奇怪,我复制粘贴进去就不行,直接输入就可以。。。
作者: HAT     时间: 2008-5-12 02:57
这次呢?
@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.