标题: 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是不忌放置地点的,放在最后与中间其实没区别