回复 8# yhcfsr
谢谢大神指导,能否给一个批处理的版本,从使用上来说,我更喜欢用批处理,谢谢
作者: yhcfsr 时间: 2018-3-27 11:50
回复 9# f0229f0229
你的#号是否都在行的开头(或者行尾)?如果在行的中间,就有些麻烦。
作者: f0229f0229 时间: 2018-3-27 11:54
回复 10# yhcfsr
都在行的开头
作者: yhcfsr 时间: 2018-3-27 12:24
本帖最后由 yhcfsr 于 2018-3-27 12:31 编辑
回复 11# f0229f0229
随手写了个,完全没什么效率,多文件长文本执行时间很长。先用着吧,有时间再搞个优化的。不过BAT处理长文本的效率本身就很差,还是要习惯powershell- @echo off
- rem 源目录
- set "SrcDir=D:\test"
-
- for /f "delims=" %%a in ('dir /a-d/s/b "%SrcDir%\*.txt"') do (
- call :read_txt "%%a"
- if exist "%%a.log" move /y "%%a.log" "%%a"
- )
- pause&exit
-
- :read_txt
- setlocal
- set "file=%~1"
- (for /f "delims=" %%b in ('findstr /n ".*" "%file%"') do (
- set "var=%%b"
- setlocal enabledelayedexpansion
- set var=!var:*:=!
- echo;"!var!"|findstr "#">nul&&(endlocal&goto:eof)
- echo;!var!
- endlocal
- ))>"%file%.log"
- endlocal
复制代码
作者: yhcfsr 时间: 2018-3-27 13:02
本帖最后由 yhcfsr 于 2018-3-27 16:05 编辑
【修正】优化上面的代码,效率比上面那个快10倍不止- @echo off
- rem 源目录
- set "SrcDir=D:\test"
-
- for /f "delims=" %%a in ('dir /a-d/s/b "%SrcDir%\*.txt"') do (
- set line=&set n=
- for /f "delims=[]" %%b in ('find /n "#" ^<"%%a"') do if not defined line set/a line=%%b
- if defined line (
- (for /f "delims=" %%b in ('findstr /n ".*" "%%a"') do (
- set/a n+=1&set "var=%%b"
- setlocal enabledelayedexpansion
- if !n! lss !line! set "var=!var:*:=!"&&echo;!var!
- endlocal
- ))>"%%a.log"
- if exist "%%a.log" move /y "%%a.log" "%%a"
- )
- )
复制代码
作者: f0229f0229 时间: 2018-3-27 13:57
回复 12# yhcfsr
你好,试用了一下,单个Txt文档都运行不完,我根据你的指点,在想能不能将以下步骤转化为批处理程序来运行,第一步,统计当前文件夹中的Txt文档数量,第二步,同时在每个文件中向下查找“#”,找到后选择“#”至文档的最后一行包括“#”都删除,然后保存,如果有个别Txt文档内容里没有查找到“#”就跳过,这样是不是就运行快了,还请大神帮忙,谢谢
作者: f0229f0229 时间: 2018-3-27 14:03
回复 13# yhcfsr
你好,这个程序运行了一下,发现对文本文档里的内容没有改变,不知何故,还请大神再修改一下,谢谢
作者: yhcfsr 时间: 2018-3-27 14:07
回复 15# f0229f0229
发个样本过来看看,测试没问题。
作者: zaqmlp 时间: 2018-3-27 14:09
- @echo off
- 2>nul md "result\"
- for /f "delims=" %%a in ('dir /a-d/b *.txt') do (
- echo;"%%a"
- >nul find "#" "%%a"&&(set "file=%%a"&call :loop)||copy "%%a" "result\"
- )
- pause&exit
- :loop
- >"result\%file%" (for /f "delims=" %%b in ('findstr /n .* "%file%"') do (
- set "line=%%b"
- setlocal enabledelayedexpansion
- if "!line:#=!" neq "!line!" (
- for /f "delims=#" %%d in ("!line!") do set "endline=%%d"
- echo;!endline:*:=!
- goto :eof
- ) else echo;!line:*:=!
- endlocal
- ))
复制代码
作者: zaqmlp 时间: 2018-3-27 14:38
- @echo off
- md "result\" 2>nul
- powershell "dir . *.txt|%%{$txt=(gc $_.FullName) -join \"`r`n\";$txt -replace '(?s)#.*$',''|out-file ('result\'+$_.Name) -enc default}"
- pause
复制代码
作者: f0229f0229 时间: 2018-3-27 15:02
回复 16# yhcfsr
已上传,请查看
作者: f0229f0229 时间: 2018-3-27 15:03
回复 18# zaqmlp
这段代码运行时报警了
作者: f0229f0229 时间: 2018-3-27 15:05
本帖最后由 f0229f0229 于 2018-3-27 15:09 编辑
回复 17# zaqmlp
你好,代码运行后生成一个新文件夹,内有同名txt文档,但不是我要的内容,我已上传样本,请帮忙看看,谢谢
作者: zaqmlp 时间: 2018-3-27 15:30
回复 20# f0229f0229
是“哇唔~嘟嘟”还是“滴嘟,滴嘟”
作者: f0229f0229 时间: 2018-3-27 15:34
回复 22# zaqmlp
是腾讯管家提示的
作者: zaqmlp 时间: 2018-3-27 15:48
回复 23# f0229f0229
厉害,那么隐蔽都被检测出来,要不然你的qq和微信就是我的了,腾讯最牛了!!
作者: yhcfsr 时间: 2018-3-27 16:06
回复 15# f0229f0229
13楼已修正
作者: yhcfsr 时间: 2018-3-27 17:07
回复 15# f0229f0229
13楼已修正
作者: f0229f0229 时间: 2018-3-27 19:23
回复 26# yhcfsr
郁闷,为何我用不了,运行速度非常快,但是txt文档里的内容一点变化都没有,我用发给你“举例文件”试了也没有反应,我把程序里的第一句的盘符改了也没有变化,我把程序里的前两句“rem 源目录,set "SrcDir=d:\test"删除后程序就运行好几分钟,得出一个如图的内容
请大神看看是什么原因,谢谢
作者: yhcfsr 时间: 2018-3-27 19:36
回复 27# f0229f0229
加我QQ 33892006
作者: f0229f0229 时间: 2018-3-27 22:21
答案在13楼,非常感谢yhcfsr (UID: 82981) 的热心指导,问题完美解决了,也谢谢其他热心朋友的相助。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |