Board logo

标题: 如此截取变量为什么会出错 [打印本页]

作者: hnlcc     时间: 2007-7-12 23:38    标题: 如此截取变量为什么会出错

请问这个要如何实现?本意是想生成一个个的等腰三角形(竖着的),但是在delay2中对var进行截取的时候老是显示不出来,我刚学习批处理,请高手指教 一下,这个问题困惑了很久
以下就是代码了
==================================================
@echo off
echo ===================================
echo  time color
echo ===================================

set /a i=1
set var=

:delay1

set var=%var%★
echo %var%
set  /a i+=1
ping /n 1 127.0>nul
if %i%==20 (goto delay2) else goto delay1

:delay2
set var=%%var:~1,-%i%%
@echo %var%
set /a i-=1
ping /n 1 127.0>nul
if %i%==1 (set var=&goto delay1) else goto delay2

:end
pause
================================================

[ Last edited by bjsh on 2007-7-31 at 12:44 AM ]
作者: bjsh     时间: 2007-7-13 00:22


  Quote:
:delay2
set var=%%var:~1,-%i%%
@echo %var%

改为

  Quote:
:delay2
set var=%var:~1,20%
echo.%var%

[ Last edited by bjsh on 2007-7-13 at 12:23 AM ]
作者: hnlcc     时间: 2007-7-13 22:43
谢谢班班,这个是可以的,我还想问一下当我在做下面这个
==============================
set /a i=1
set var=abcdefg
:delay
set /a i+=1
set var=%var:~1,%i%%
echo var
if i == 5 (goto :delay) else goto eof
==============================

做这个的时候老是会出错误,不是打出b bc bcd .....这样的序列,而是直接把%var:~1,%i%%这样的字符串打出来了,请问一下我要的功能如何实现呢?就是在i++的时候对var进行截取,我看过别人的程序,对%这个的用法还是不太清楚,高手给解释一下,谢谢
作者: bjsh     时间: 2007-7-14 00:53
你上面的的 程序除了 在逻辑上有错误;
语法上也有几处错误;

这个
echo var
应该为 echo %var% 吧;

if i == 5 (goto :delay) else goto eof 这句在语法上 goto :eof ;

逻辑上 运行到此处直接 退出了 并不会 goto delay(一般goto到标签; 不在标签前面加冒号除了特殊的 eof; call 标签是加冒号的;)

================================
set var=%var:~1,%i%%

需要用

call set var=%%var:~1,%i%%%

可以参考下面的帖子
http://www.cn-dos.net/forum/view ... p;highlight=%2Bbjsh

===================================
或许得到的结果依然有一部分不是你想要的;
你需要好好理解 变量字符的截取;
看看 set /? 翻翻以前的帖子;
作者: hnlcc     时间: 2007-7-14 13:49
班班说的太对了,呵呵,上面那些逻辑和语法错误是意外,意外呵呵。谢谢啦~~
作者: luckydjc     时间: 2007-7-25 20:11
努力学习中....