中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-28 23:52
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如此截取变量为什么会出错 查看 777 回复 5
楼 主 如此截取变量为什么会出错 发表于 2007-07-12 23:38 ·  中国 上海 浦东新区 电信
新手上路
积分 12
发帖 5
注册 2006-11-13 01:38
19年会员
UID 70383
性别 男
状态 离线
请问这个要如何实现?本意是想生成一个个的等腰三角形(竖着的),但是在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 ]
2 发表于 2007-07-13 00:22 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线

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


改为

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


[ Last edited by bjsh on 2007-7-13 at 12:23 AM ]
3 发表于 2007-07-13 22:43 ·  中国 上海 电信
新手上路
积分 12
发帖 5
注册 2006-11-13 01:38
19年会员
UID 70383
性别 男
状态 离线
谢谢班班,这个是可以的,我还想问一下当我在做下面这个
==============================
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进行截取,我看过别人的程序,对%这个的用法还是不太清楚,高手给解释一下,谢谢
4 发表于 2007-07-14 00:53 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
你上面的的 程序除了 在逻辑上有错误;
语法上也有几处错误;

这个
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/viewthread.php?tid=28552&fpage=1&highlight=%2Bbjsh

===================================
或许得到的结果依然有一部分不是你想要的;
你需要好好理解 变量字符的截取;
看看 set /? 翻翻以前的帖子;
5 发表于 2007-07-14 13:49 ·  中国 上海 浦东新区 电信
新手上路
积分 12
发帖 5
注册 2006-11-13 01:38
19年会员
UID 70383
性别 男
状态 离线
班班说的太对了,呵呵,上面那些逻辑和语法错误是意外,意外呵呵。谢谢啦~~
6 发表于 2007-07-25 20:11 ·  中国 广东 珠海 电信
新手上路
积分 4
发帖 2
注册 2007-07-25 19:46
18年会员
UID 94029
性别 男
状态 离线
努力学习中....
论坛跳转: