Board logo

标题: set/p=*<nul进行循环产生的怪异结果 [打印本页]

作者: jlty258     时间: 2009-6-1 05:33    标题: 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

显示结果为
*   
*     *      *
*     *      *      *      *
*     *      *      *      *      *      *
*     *      *      *      *
*     *      *
*  
自己看了半天,是在找不出来原因
哪位帮忙看一下?
作者: 26933062     时间: 2009-6-1 06:27
你的 set /p=*<nul 后面多了个空格
作者: flyzr     时间: 2009-6-1 08:21
set /p=*<nul 後面空格有什麼用?
作者: jlty258     时间: 2009-6-1 12:13
确实是多了个空格的原因,在set/p=*<nul 后加了回车后效果就出来,但是这原因是什么?还望哪位解答一下!
我曾经专门在记事本中测试过空格行,空格对命令效果的影响,但也无法解释上述问题....

[ Last edited by jlty258 on 2009-6-1 at 12:15 ]
作者: qzwqzw     时间: 2009-6-1 22:12
原因很简单
因为cmd认为set /p set /p=*<nul(空格)与set /p=*(空格)<nul是一样的
这源于cmd的预处理机制
作者: jlty258     时间: 2009-6-2 01:18
原来如此,突然想起<nul是不忌放置地点的,放在最后与中间其实没区别