中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 23:41
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » set/p=*<nul进行循环产生的怪异结果
可打印版本  877 / 5
第1楼 jlty258 发表于 2009-06-01 05:33
初级用户 发帖 34 积分 37
set/p=*<nul进行循环产生的怪异结果
原想打印出如下图形
*
***
*****
*******
*****
***
*
编了如下程序
@echo off& setlocal enabledelayedexpansion
for /l %%i in (1,2,13) do (
if defined flag (set/a n-=2) else set/a n=%%i
for /l %%k in (1,1,!n!) do set /p=*<nul
echo.
if !n! geq 7 set flag=a
)
echo.&pause

显示结果为
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
自己看了半天,是在找不出来原因
哪位帮忙看一下?
第2楼 26933062 发表于 2009-06-01 06:27
银牌会员 发帖 879 积分 2,268
你的 set /p=*<nul 后面多了个空格
第3楼 flyzr 发表于 2009-06-01 08:21
新手上路 发帖 10 积分 11
set /p=*<nul 後面空格有什麼用?
第4楼 jlty258 发表于 2009-06-01 12:13
初级用户 发帖 34 积分 37
确实是多了个空格的原因,在set/p=*<nul 后加了回车后效果就出来,但是这原因是什么?还望哪位解答一下!
我曾经专门在记事本中测试过空格行,空格对命令效果的影响,但也无法解释上述问题....

[ Last edited by jlty258 on 2009-6-1 at 12:15 ]
第5楼 qzwqzw 发表于 2009-06-01 22:12
银牌会员 发帖 636 积分 2,343
原因很简单
因为cmd认为set /p set /p=*<nul(空格)与set /p=*(空格)<nul是一样的
这源于cmd的预处理机制
第6楼 jlty258 发表于 2009-06-02 01:18
初级用户 发帖 34 积分 37
原来如此,突然想起<nul是不忌放置地点的,放在最后与中间其实没区别
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023