Board logo

标题: [文本处理] [已解决]输出符合条件行的内容到另一个文本并删除原文本行的批处理怎样批量拖入? [打印本页]

作者: 碇シンジ    时间: 2011-9-15 17:33     标题: [已解决]输出符合条件行的内容到另一个文本并删除原文本行的批处理怎样批量拖入?

本帖最后由 碇シンジ 于 2011-9-19 15:52 编辑

http://www.bathome.net/thread-13938-1-1.html
之前已经求过一次了.地址如上,awk大大的代码效果很好.本来想着自己弄成批量化的就是可以一次性拖入多个文件.可是始终不行.因为自己始终都不懂批处理来着,看了不少案例也是看不懂该怎么套用FOR或者SET.(或许根本也用不上....)
目前代码已经换成了自己需要用到的情况
  1. @echo off
  2. for %%f in (%*) do (
  3. findstr "zheshimark" %%f>%%~dpnf.end.txt
  4. findstr /v "zheshimark" %%f>%%~dpnf.continued.txt
  5. )
复制代码
(代码重新更新了一下,原来的输出会变成*.TXT.END.TXT这种类型.更新后的代码则是*.END.TXT)
另外想追加一个功能.就是分离完成后,删除掉该关键字
1213[完]zheshimark
sadf[完]zheshimark
grg[完]zheshimark
b4345[完]zheshimark
[未]
4ffg[完]zheshimark
jkdfglj[完]zheshimark
[完]zheshimark
lf94[完]zheshimark
f0g904[完]zheshimark
[未]
94kjlkv[完]zheshimark
k4jmb4[完]zheshimark
vklb40b[完]zheshimark
[未]
vlkb4l;4[完]zheshimark
vblk4lkh0[完]zheshimark
oib4kl;v0[完]zheshimark
源文件内容如上,
执行批处理后,生成2个TXT文件
一个%1.end.txt

1213[完]
sadf[完]
grg[完]
b4345[完]
4ffg[完]
jkdfglj[完]
[完]
lf94[完]
f0g904[完]
94kjlkv[完]
k4jmb4[完]
vklb40b[完]
vlkb4l;4[完]
vblk4lkh0[完]
oib4kl;v0[完]

一个%1.continued.txt
[未]
[未]
[未]

求指教....求帮忙
作者: garyng    时间: 2011-9-15 20:42

多文件的啊~
看看这个~
希望有用~
批处理怎样实现拖拽多个文件到CMD窗口,显示每一个文件名?
作者: CrLf    时间: 2011-9-16 09:18

  1. for %%f in (%*) do echo %%f
复制代码
或者
  1. :a
  2. echo %1
  3. shift
  4. if "%~1" neq "" goto a
复制代码

作者: 碇シンジ    时间: 2011-9-16 16:00

本帖最后由 碇シンジ 于 2011-9-16 16:03 编辑

回复 2# garyng

回复 3# CrLf

3Q两位大大的指教.反复折腾之后算是初步得到想要的批量处理了....直接套用了garyng大大给出的链接里的代码(其实看不懂来着....想着自己修一修也做不到.),可以很好的分离出拖入的2个文本的内容.
目前得到的有效代码如下↓
  1. @echo off
  2. set str=%*
  3. set "str=%str:"=%"
  4. set "str= %str%"
  5. call set "str=%%str: %~d1=" "%~d1%%"
  6. for %%f in ("%str%") do (
  7. cd /d %%f
  8. findstr "zheshimark" %%f>%%f.end.txt
  9. findstr /v "zheshimark" %%f>%%f.continued.txt
  10. )
  11. pause
复制代码
但是运行时会提示.
FINDSTR: 无法打开
FINDSTR: 无法打开
目录名无效。
目录名无效。

目录名无效的部分删除代码cd /d %%f解决了- -
另外根据CrLf版主的第一段代码
  1. @echo off
  2. for %%f in (%*) do (
  3. findstr "zheshimark" %%f>%%f.end.txt
  4. findstr /v "zheshimark" %%f>%%f.continued.txt
  5. )
  6. pause
  7. exit
复制代码
同样有效.而且更加简洁来着.但是CrLf版主第二部分的代码就完全没头绪该怎么看(自己不懂....抱歉)
----
分离完成后,删除掉该关键字
就是删除掉TXT文档内 zheshimark ←这些固定组合的字符.
这个功能该怎么实现?可有办法?也翻过坛子里的那些删除指定字符前几个字符之类帖子.可是都没有删除指定字符来着.而且代码完全看不懂....
能不能求给一个范例?
作者: weichenxiehou    时间: 2011-9-16 18:25

  1. @echo off
  2. set "mark=zheshimark"
  3. for %%i in (%*) do (
  4.   findstr /i /c:"%mark%" %%i >%%~ni.tmpx
  5.   findstr /i /v /c:"%mark%" %%i >%%~ni.temp
  6. )
  7. for %%i in (*.tmpx) do (
  8.   (for /f "tokens=2 delims=:" %%j in ('findstr /n .* %%i') do (
  9.     set "str=%%j"
  10.     setlocal enabledelayedexpansion
  11.     if defined str set "str=!str:%mark%=!"
  12.     echo,!str!
  13.     endlocal
  14.   ))>%%~ni.tmpn
  15.   move /y %%~ni.tmpn %%~ni.tmpx>nul
  16. )
复制代码

作者: 碇シンジ    时间: 2011-9-17 15:34

回复 5# weichenxiehou
    ....抱歉.因为第二个FOR看不懂来着就直接用大大给出的全部代码弄成BAT进行尝试了.可是结果是什么都没有出来.删掉了@ECHO OFF命令并在最后加上PAUSE.只能得到.
~
FINDSTR:无法打开 复件
FINDSTR:无法打开 (2)
命令语法不正确。
~
FINDSTR:无法打开 复件
命令语法不正确。

执行用的TXT是ttt.txt
经过搜索发现生成的2个文件在C:\Documents and Settings\Administrator目录下并不是源文件的目录下,但是ttt.temp没有问题,ttt.tmpx显示成.....
[url=http
[url=http
[url=http
[url=http
是因为处理的文本带有:的原因?
直接将文本给出来好了= =
[attach]4458[/attach]
作者: weichenxiehou    时间: 2011-9-17 18:00

回复 6# 碇シンジ
  1. @echo off
  2. set "mark=zheshimark"
  3. for %%i in (%*) do (
  4.   findstr /i /c:"%mark%" %%i >%%~ni.tmpx
  5.   findstr /i /v /c:"%mark%" %%i >%%~ni.temp
  6. )
  7. for %%i in (*.tmpx) do (
  8.   (for /f "tokens=1* delims=:" %%j in ('findstr /n .* %%i') do (
  9.     set "str=%%k"
  10.     setlocal enabledelayedexpansion
  11.     if defined str set "str=!str:%mark%=!"
  12.     echo,!str!
  13.     endlocal
  14.   ))>%%~ni.tmpn
  15.   move /y %%~ni.tmpn %%~ni.tmpx>nul
  16. )
复制代码
代码已更正,当时没测试,没想到那么多,生成的文件在bat所在目录哈。
作者: Batcher    时间: 2011-9-17 19:42

回复 6# 碇シンジ


直接贴代码不是挺方便吗,尽量不要截图。
作者: 碇シンジ    时间: 2011-9-18 11:44

本帖最后由 碇シンジ 于 2011-9-18 11:50 编辑

回复 8# Batcher
抱歉.习惯性使然,以后会注意了.
回复 7# weichenxiehou
代码有效很感谢,但是有一个问题就是.输出的文件依旧跑到了C:\Documents and Settings\Administrator目录下,
尝试过将%%~ni给修改成%%~dpni可是这样一来输出路径是对了.但是zheshimark反倒删除不了了
作者: weichenxiehou    时间: 2011-9-18 12:01

回复 9# 碇シンジ
  1. @echo off
  2. set "mark=zheshimark"
  3. for %%i in (%*) do (
  4.   findstr /i /c:"%mark%" %%i >%%~ni.tmpx
  5.   findstr /i /v /c:"%mark%" %%i >%%~ni.temp
  6. )
  7. for %%i in (*.tmpx) do (
  8.   (for /f "tokens=1* delims=:" %%j in ('findstr /n .* %%i') do (
  9.     set "str=%%k"
  10.     setlocal enabledelayedexpansion
  11.     if defined str set "str=!str:%mark%=!"
  12.     echo,!str!
  13.     endlocal
  14.   ))>%%~ni.tmpn
  15.   move /y %%~ni.tmpn %%~ni.tmpx>nul
  16. )
  17. move *.tmpx "%~dp1"
  18. move *.temp "%~dp1"
复制代码
移动过去就成了吧?
作者: 碇シンジ    时间: 2011-9-19 15:51

回复 10# weichenxiehou


    实在是感谢!这几天真是辛苦大大了!




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