Board logo

标题: [文本处理] [已解决]批处理重定向符输出文件 [打印本页]

作者: Wingl83    时间: 2010-9-10 18:22     标题: [已解决]批处理重定向符输出文件

  1. @echo off
  2. set "n=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="安全模式" /safeboot:minimal /sos /bootlog /noguiboot"
  3. (for /f "delims=" %%a in (boot.ini) do (
  4.        echo %%a
  5.        if "%%a" equ "[operating systems]" echo %n%
  6. ))>boot.ini
复制代码
弹出错误提示:
此时不应有 disk(0。

要不然就
系统找不到文件 boot.ini。

究竟是哪里有问题?

[ 本帖最后由 Wingl83 于 2010-9-10 23:06 编辑 ]
作者: zqz0012005    时间: 2010-9-10 20:10

1、注释掉@echo off或者把%n%手动换成实际字符串就知道错误原因了。使用!n!

2、文件访问冲突。你在for里是读,在重定向里是写,其实是写操作先打开文件的,且由于是覆盖模式,打开时会把文件清空,其他命令去读时就读不到原来的内容了。至于提示错误找不到文件,可能是在(for file)>file的方式下对for来说有点特殊,会导致for找不到文件。(type file)>file就不会提示此错误。

试试:
echo hello>1.txt
type 1.txt > 1.txt
type 1.txt

echo hello>1.txt
type 1.txt >> 1.txt
type 1.txt
作者: Wingl83    时间: 2010-9-10 20:38

原帖由 zqz0012005 于 2010-9-10 20:10 发表
1、注释掉@echo off或者把%n%手动换成实际字符串就知道错误原因了。使用!n!

2、文件访问冲突。你在for里是读,在重定向里是写,其实是写操作先打开文件的,且由于是覆盖模式,打开时会把文件清空,其他命令去读时 ...


那只可以输出到新的文件再覆盖boot.ini么?
作者: zqz0012005    时间: 2010-9-10 21:23

其实用临时文件效率还是挺高的。
or like this
  1. @echo off
  2. set "flag="
  3. for /f %%a in (01.txt) do if not defined flag (set flag=1&echo +%%a>01.txt) else echo -%%a>>01.txt
复制代码
这次读、写操作打开文件的顺序不同了。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2