Board logo

标题: echo的一些奇怪问题 [打印本页]

作者: jialot     时间: 2007-12-30 23:02    标题: echo的一些奇怪问题

本人外行,高手莫笑
用ECHO做个文本,发现以下问题,请高手解释下:
>前面没空格,是不想输出到文本有空格
一:
@echo off
echo 第1行=1>1.txt
echo 第2行=2>>1.txt
echo 第3行=3>>1.txt
echo 第4行=4>>1.txt
echo 第5行=5>>1.txt
echo 第6行=6>>1.txt
echo 第7行=7>>1.txt
echo 第8行=8>>1.txt
echo 第9行=9>>1.txt
echo 第10行=10>>1.txt
echo 第11行 1>>1.txt
echo 第12行 2>>1.txt
echo 第13行 3>>1.txt
echo 第14行 4>>1.txt
echo 第15行 5>>1.txt
echo 第16行 6>>1.txt
echo 第17行 7>>1.txt
echo 第18行 8>>1.txt
echo 第19行 9>>1.txt
echo 第20行 10>>1.txt
echo 第21行=11>>1.txt
echo 第22行 12>>1.txt
echo 第23行=1 >>1.txt
echo 第24行=2 >>1.txt
echo 第25行 1 >>1.txt
echo 第26行 2 >>1.txt
exit

输出的1.txt如下:
第1行=
第10行=10
第11行
第20行 10
第21行=11
第22行 12
第23行=1
第24行=2
第25行 1
第26行 2

问题:
1.第1行“第1行=1”输出成“第1行=”(1没了)
2.第11行的“第11行 1”变成“第11行 ”(空格在,1没了)
3.第2-9行及12-19行消失了
4.当数字为2位数字或>前带空格,则一切正常

但是如果在每个>前加个符号,比如“晕”,再把晕字替换掉,又一些正常
echo 第1行=1晕>1.txt
echo 第2行=2晕>>1.txt
echo 第3行=3晕>>1.txt
echo 第4行=4晕>>1.txt
echo 第5行=5晕>>1.txt
echo 第6行=6晕>>1.txt
echo 第7行=7晕>>1.txt
echo 第8行=8晕>>1.txt
echo 第9行=9晕>>1.txt
echo 第10行=10晕>>1.txt
echo 第11行 1晕>>1.txt
echo 第12行 2晕>>1.txt
echo 第13行 3晕>>1.txt
echo 第14行 4晕>>1.txt
echo 第15行 5晕>>1.txt
echo 第16行 6晕>>1.txt
echo 第17行 7晕>>1.txt
echo 第18行 8晕>>1.txt
echo 第19行 9晕>>1.txt
echo 第20行 10晕>>1.txt
echo 第21行=11晕>>1.txt
echo 第22行 12晕>>1.txt
echo 第23行=1晕>>1.txt
echo 第24行=2晕>>1.txt
echo 第25行 1晕>>1.txt
echo 第26行 2晕>>1.txt
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
    set var=%%i
    set "var=!var:晕=!"
    echo !var!>>2.txt
)
del 1.txt
ren 2.txt 1.txt

[ Last edited by jialot on 2007-12-30 at 11:09 PM ]
作者: fastslz     时间: 2007-12-30 23:14
通常>前面的字符是0、1、2的话都要加转定义符^
@echo off
echo 第1行=^1>1.txt
echo 第2行=^2>>1.txt
echo 第10行=1^0>>1.txt
或者用这个代码
@echo off
>1.txt echo 第1行=1
>>1.txt echo 第2行=2
>>1.txt echo 第3行=3
>>1.txt echo 第4行=4
>>1.txt echo 第5行=5
>>1.txt echo 第6行=6
>>1.txt echo 第7行=7
>>1.txt echo 第8行=8
>>1.txt echo 第9行=9
>>1.txt echo 第10行=10
>>1.txt echo 第11行 1
>>1.txt echo 第12行 2
>>1.txt echo 第13行 3
>>1.txt echo 第14行 4
>>1.txt echo 第15行 5
>>1.txt echo 第16行 6
>>1.txt echo 第17行 7
>>1.txt echo 第18行 8
>>1.txt echo 第19行 9
>>1.txt echo 第20行 10
>>1.txt echo 第21行=11
>>1.txt echo 第22行 12
>>1.txt echo 第23行=1
>>1.txt echo 第24行=2
>>1.txt echo 第25行 1
>>1.txt echo 第26行 2
exit

作者: terse     时间: 2007-12-30 23:14
试试这样:
>1.txt echo 第1行=1
>>1.txt echo 第2行=2
>>1.txt echo 第3行=3
..................
作者: jialot     时间: 2007-12-30 23:23
谢谢各位,上述方法可行
但我还是不明白
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
    set var=%%i
    set "var=!var:晕=!"
    echo !var!>>2.txt
)
del 1.txt
ren 2.txt 1.txt
这段里面也有echo !var!>>2.txt,为何又可以正常输出呢?
作者: fastslz     时间: 2007-12-30 23:40

setlocal enabledelayedexpansion
echo 0>2.txt

setlocal enabledelayedexpansion
echo !0>2.txt
echo !>>2.txt

setlocal enabledelayedexpansion
echo !0>2.txt
endlocal
echo !>>2.txt

作者: cndos     时间: 2007-12-30 23:47
说穿了不过是重定向的通道而已
在重定向符号前面加数字0~9
代表重定向不同的通道
0是标准输入
1是标准输出
2是标准错误
3~9则是未定义的通道
作者: lovealei     时间: 2008-1-8 01:46
先谢谢大家了,我虽然还不明白,但总算有点思路了

下面这段代码是朋友给我的

cd ghost
if exist WATTCP.CFG del WATTCP.CFG >nul


md ip

SET ip=1

if exist ip\1.ip SET ip=2
...more...

if exist ip\253.ip SET ip=254

if "%ip%" == "1" echo. >ip\1.ip

echo IP=192.168.2.%ip%> Wattcp.cfg


if "%ip%" == "2" ren ip\1.ip 2.ip

...more...

if %ip% == 254 ren ip\253.ip 254.ip


REM echo IP=192.168.2.%1> Wattcp.cfg

echo NETMASK=255.255.255.0>> Wattcp.cfg
echo GATEWAY=192.168.2.251>> Wattcp.cfg

大家帮忙看看,我去试试!