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

你好,这个程序运行了一下,发现对文本文档里的内容没有改变,不知何故,还请大神再修改一下,谢谢

TOP

回复 12# yhcfsr
你好,试用了一下,单个Txt文档都运行不完,我根据你的指点,在想能不能将以下步骤转化为批处理程序来运行,第一步,统计当前文件夹中的Txt文档数量,第二步,同时在每个文件中向下查找“#”,找到后选择“#”至文档的最后一行包括“#”都删除,然后保存,如果有个别Txt文档内容里没有查找到“#”就跳过,这样是不是就运行快了,还请大神帮忙,谢谢

TOP

本帖最后由 yhcfsr 于 2018-3-27 16:05 编辑

【修正】优化上面的代码,效率比上面那个快10倍不止
  1. @echo off
  2. rem 源目录
  3. set "SrcDir=D:\test"
  4. for /f  "delims=" %%a in ('dir /a-d/s/b "%SrcDir%\*.txt"') do (
  5. set line=&set n=
  6. for /f "delims=[]" %%b in ('find /n "#" ^<"%%a"') do if not defined line set/a line=%%b
  7. if defined line (
  8. (for /f "delims=" %%b in ('findstr /n ".*" "%%a"') do (
  9. set/a n+=1&set "var=%%b"
  10. setlocal enabledelayedexpansion
  11. if !n! lss !line! set "var=!var:*:=!"&&echo;!var!
  12. endlocal
  13. ))>"%%a.log"
  14. if exist "%%a.log" move /y "%%a.log" "%%a"
  15. )   
  16. )
复制代码
1

评分人数

TOP

本帖最后由 yhcfsr 于 2018-3-27 12:31 编辑

回复 11# f0229f0229


随手写了个,完全没什么效率,多文件长文本执行时间很长。先用着吧,有时间再搞个优化的。不过BAT处理长文本的效率本身就很差,还是要习惯powershell
  1. @echo off
  2. rem 源目录
  3. set "SrcDir=D:\test"
  4. for /f  "delims=" %%a in ('dir /a-d/s/b "%SrcDir%\*.txt"') do (
  5. call :read_txt "%%a"
  6. if exist "%%a.log" move /y "%%a.log" "%%a"
  7. )
  8. pause&exit
  9. :read_txt
  10. setlocal
  11. set "file=%~1"
  12. (for /f  "delims=" %%b in ('findstr /n ".*" "%file%"') do (
  13.         set "var=%%b"
  14. setlocal enabledelayedexpansion
  15.         set var=!var:*:=!
  16. echo;"!var!"|findstr "#">nul&&(endlocal&goto:eof)
  17. echo;!var!
  18. endlocal
  19. ))>"%file%.log"
  20. endlocal
复制代码

TOP

回复 10# yhcfsr

都在行的开头

TOP

回复 9# f0229f0229


    你的#号是否都在行的开头(或者行尾)?如果在行的中间,就有些麻烦。

TOP

回复 8# yhcfsr
谢谢大神指导,能否给一个批处理的版本,从使用上来说,我更喜欢用批处理,谢谢

TOP

回复 7# f0229f0229


    关于PS脚本限制的问题讲很多了,这里不赘述了。必须管理员打开PS,输入Set-ExecutionPolicy Unrestricted,先择全是才能解除。
除非安全级别很高的地方,否则,这样做也没什么危险。

TOP

回复 6# yhcfsr
谢谢大神帮忙,我没有用过这种程序,后辍名改为ps1后运行要求修改安全策略,我选择“N”后不能运行,请问能否写成BAT形式的来运行,文本文件内“#”符号前边的内容都是数字格式的,应该不会影响内容,还请大神指点,谢谢

TOP

回复 4# f0229f0229
POWERSHELL
  1. $SrcDir="D:\test";#源目录
  2. Get-ChildItem -Path $SrcDir -Recurse -Filter *.txt|ForEach-Object{
  3. $str=$null;$flag=$false;
  4.     $content=Get-Content -Path $_.fullname;
  5.     foreach($line in $content){
  6.        for($i=0;$i -lt $line.Length;$i++){
  7.         if($line[$i] -eq '#'){$flag=$true;break}else{$str+=$line[$i]}
  8.        }#for
  9.        if($flag){break;}else{$str+="`r`n"}
  10.     }#foreach
  11.     Out-File -FilePath $_.FullName -InputObject $str;      
  12. }
复制代码

TOP

回复 3# Batcher

对不起,想简单了,原文件内“#”之前的内容有多有少格式固定,“#”之后内容大部分是这样的固定格式,我想要的效果是:不管文本内容里有多少个“#”符号,都只保留第一个“#”符号之前的内容,“#”符号之后(包括“#”符号在内),不管是什么格式,有多少内容,全部删除,并且都在原文件内执行,不产生新的文件,还请大神帮忙,谢谢
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3
#START_USER_DATA
1  2  3  4  5  6
7  8  9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
37 38 39 40 41 42
#CONFIG_DATA20
8 8 8 88  8  8  8
#END_USER_DATA

批处理以后的效果
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3

TOP

回复 2# yhcfsr
对不起,想简单了,原文件内“#”之前的内容有多有少格式固定,“#”之后内容大部分是这样的固定格式,我想要的效果是:不管文本内容里有多少个“#”符号,都只保留第一个“#”符号之前的内容,“#”符号之后(包括“#”符号在内),不管是什么格式,有多少内容,全部删除,并且都在原文件内执行,不产生新的文件,还请大神帮忙,谢谢
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3
#START_USER_DATA
1  2  3  4  5  6
7  8  9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
37 38 39 40 41 42
#CONFIG_DATA20
8 8 8 88  8  8  8
#END_USER_DATA

批处理以后的效果
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3

TOP

请把原始文件和删除之后想要实现的效果分别发出来看看
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 yhcfsr 于 2018-3-26 11:00 编辑

也不给段例文,你是想删除每行中#后的内容,还是删除#后的全文内容??
建议用POWERSHELL,如果文中有特殊英文标点,文本处理会失真。[code]$SrcDir="D:\test";#源目录

TOP

返回列表