Board logo

标题: [文本处理] [已解决]批处理findstr命令怎样不用临时文件输出至原文件? [打印本页]

作者: ge_xin_yu    时间: 2011-5-14 14:59     标题: [已解决]批处理findstr命令怎样不用临时文件输出至原文件?

本帖最后由 ge_xin_yu 于 2011-5-15 03:33 编辑

如下代码:

1、findstr 12 1.txt >temp.txt
2、findstr 12 1.txt >1.txt

代码1可以实现正常功能,但代码2输出后发现1.txt为空,为什么输出至同一文件为空呢?如果需要输出至同一文件,该如何写?当然可以先输出至temp.txt,然后在copy至1.txt,但始终感觉太繁琐,能不能一条命令就可以实现此功能?高手帮忙看看!!
作者: powerbat    时间: 2011-5-14 15:22

预处理时发现有重定向符号>,先创建输出文件句柄,而且是覆盖方式(如果用>>则是追加方式)。创建句柄后再执行命令,文件内容已经清零了。
比如当前目录下本来没有no.txt文件,执行dir>no.txt,打开no.txt会看到里面记录了no.txt,就是因为no.txt在执行命令前已经创建了。
作者: ge_xin_yu    时间: 2011-5-14 15:39

2# powerbat
感谢答复,有没有方法可以避免预处理第二条语句,就像延迟变量一样?我有个删除重复IP的批处理需要这样做,先输入至临时文件再拷入原文件始终感觉太繁琐,如果一条语句解决,看上去就很简单明了,也容易读。。。
作者: powerbat    时间: 2011-5-14 16:29

  1. @echo off
  2. for /f "delims=" %%a in ('findstr 12 1.txt') do (
  3. if not defined flag (set flag=1&echo %%a>1.txt) else echo %%a>>1.txt
  4. )
复制代码

作者: hanyeguxing    时间: 2011-5-14 18:25

  1. findstr 12 1.txt>$&&move $ 1.txt
复制代码

作者: ge_xin_yu    时间: 2011-5-14 20:47

5# hanyeguxing

请问版主,代码中这个>$中的$是指的什么文件,搜了一遍居然没发现!!
作者: hanyeguxing    时间: 2011-5-14 20:49

你也可以把$改成temp.txt,明白什么意思没?
作者: ge_xin_yu    时间: 2011-5-14 21:03

本帖最后由 ge_xin_yu 于 2011-5-14 21:12 编辑

7# hanyeguxing
明白,我就是这样写的,但中间产生了临时文件,实际上用了两个命令,能不能用一个命令实现这一点同样的功能??
作者: Batcher    时间: 2011-5-15 03:14

8# ge_xin_yu


sed和change可以
http://bbs.bathome.net/thread-3981-1-1.html




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