[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理ECHO.输出重定向为何出错?

1、
  1. set file=1.txt
  2. set dat=asdfawefasfasdfasdf
  3. for /l %%1 in (1,1,10) do echo.>>%file%|echo %dat%>>%file%
  4. pause
复制代码
上边的句子我没有写错啊,但为什么echo.会多输出一个空格呢?各位帮我研究一下?
这是我程序中的一段,有空格会影响到全局的写入顺序。

2、
还有另一个问题我没研究出来也没办会用实例表示,就是先读取一个TXT,用echo %a%>>写入,结果不是另起一行而是接着最后一行后面写入,是为什么?
例:最后一行是1111,写入%a%=2222
结果文件最后一行变成11112222
而不是正常的
1111
2222
但不是全都这样而是有时这样是为什么?是否存在一个读取的指针呢?
如果是可以加以利用吗?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
世界上没有学不会的知识,也没有想得到却做不到的事!

echo.>>%file%|echo %dat%>>%file%
这句明显有问题
重定向>>与管道同时使用
给cmd带来疑问
第一句echo.是把输出重定向到%file%中
还是通过管道送到echo %dat%中呢?
1

评分人数

天的白色影子

TOP

是成功写入了文件但不是空行而是一个空格
就是一空格一行
另一行是%a%的值,如果使用了&替换|则没问题,但那个空格为什么会产生呢?
真的是命令冲突带来的新效应?
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

其实主要是问题2引起的,所以我不得不在输入%a%前加一个空行,以保证写入新的行,结果发现了新的问题呵
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

本帖最后由 zm900612 于 2011-5-17 21:56 编辑

cmd进行预处理的时候,会将重定向挪到语句末尾,并在其后加上空格,若使用默认句柄1或0而未标明,则也会自动补足。而连接符&、&&、|、||在预处理的时候也会在前后各加一个空格(如果原先不存在),这样echo.>>%file%|echo %dat%>>%file%实际上是
“echo. 1>>1.txt  | echo asdfawefasfasdfasdf 1>>1.txt ”
这时候因为第一句echo不存在除重定向与空格之外的字符,所以大概是被划分成“echo. 1>>1.txt  ”而就输出了空格吧
解决方法,为echo加上括号,或者干脆不要用连接符
顺便一提,楼主如果用&我还可以理解,为什么重定向之后还要用通道呢?重定向是在通道之后被预处理的,也就是说,重定向比通道优先级高,使用了重定向,通道是没有作用的
1

评分人数

TOP

对问题2的猜测,原文本最后一行没有换行符

TOP

其实这里说成优先级不太合适,这和预处理顺序上的优先级是相反的,越迟出现的,就越权威

TOP

本帖最后由 mxxcgzxxx 于 2011-5-17 21:53 编辑

5# zm900612


也是好玩才用通道的,没想到效果不同呵
原来是因为下面两句的效果不同才以为用通道重定向是一样的结果
  1. echo 123|echo 256|echo 789
  2. echo 123>>1.txt|echo 256>>1.txt|echo 789>>1.txt
复制代码
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

本帖最后由 mxxcgzxxx 于 2011-5-17 22:01 编辑

看来你对2的猜想是对的,我又试了一次
原来是最后一句没换行,而echo定完一句就会自动换行给外空行
所以如果用echo 123>>1.txt时下面两个文件效果是不同的
  1. 文件1
  2. 123
复制代码
  1. 文件2
  2. 123
  3. (空行)
复制代码
还有通道确实是给输入的字后面加上了空格。
两个问题都解决了!谢谢

确实我的原文本原来是用手写的,所以有的会出错有的不会出错!
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

返回列表