future_93
(running in the 93s)
2020 年8 月 29 日 01:55
1
基于在 【纯文本】在文本文件中批量搜索一批字符串 中 rodger 兄台提供的思路,写了个基于字典文件搜索文本文件并输出报告的批处理,但跑起来不大正常,于是把代码发在这里想向各位大能请教一下。
(别问我为什么不直接用 FINDSTR 命令,字典太大它罢工了)
构思是用FOR命令循环提取字典的一整行为一个搜索目标,然后用 FINDSTR 命令配合 ERRORLEVEL 进行一次静默搜索,如果没搜索到就直接跳过,如果搜索到了,就先用 ECHO 命令输出一行搜索目标,再用 FIND 命令输出详细的搜索结果。然后进入下一轮循环。
这么搞的目的是为了避免直接使用 FIND 命令导致的没有搜索结果时也在输出报告中大量写入诸如“---------- TARGET.txt”的无效内容。而现在的面临的问题也在此处,执行代码时发现前半段的判断代码似乎无效,即使没有结果也会执行后半段的三行输出指令。
下面是问题代码:
FOR /F "delims=" %%G IN (DICT.txt) DO (
FINDSTR /l /i /m /c:"%%G" TARGET.txt
IF %ERRORLEVEL% EQU 0 (
ECHO %%G >>FINDRESULT.txt
FIND /N "%%G" TARGET.txt >>FINDRESULT.txt
ECHO:
)
)
rodger
(Rodger Yuan)
2020 年8 月 29 日 03:08
2
//每个关键词匹配的行
cat DICT.txt|xargs -i grep -n {} TARGET.txt
//每个关键词匹配的行数
cat DICT.txt|xargs -i grep -n {} -c TARGET.txt
我觉得你没必要特别纠结那些无效的行,因为一个查找替换就删除了。重要的是得到结果,除非是要做一个经常重复的工作,否则,过程的脚本都是可抛的。过滤掉内容可以用sed跑一遍。
1 个赞
dms
(稻米鼠)
2020 年8 月 29 日 10:11
9
vbscript 是 VB 的一个子集。不过一般学 VB 都是先搞 GUI,而 vbs 则直接奔着命令去的。
其实学点 js 也不错,VSC 装一个 code run,在编辑器里直接运行。(保存以后从终端运行也可以)。总之,随便学一种脚本,搞这些问题都很方便。
1 个赞
future_93
(running in the 93s)
2020 年8 月 29 日 12:18
12
懂了,计划去研究一下……感觉一下子要学好多啊。总之多谢。
说个题外话,小时候我可喜欢在vb里画GUI了,经常对着电脑几个小时画出个贼漂亮贼复杂的窗口,然而背后的代码一行都没有。
那么你继续用 vb 啊。。vb6 一样能够运行在最新的 win10 里面,微软只是说不再增加新功能,没法不让运行了。vbscript 除了操作文件等少数地方和 vb6 不一样之外,像操作字符串,print 打印都是跟 vb 一样的,建议你花半天时间学习一下 ,以后就有一个技能了。
现在还有很多教授写程序用 fortran 呢。古老的技术未必不能用。
1 个赞
future_93
(running in the 93s)
2020 年8 月 30 日 01:22
16
原来还能用啊。我记得很久以前看到新闻说微软不再支持vb6、转向vb.net了,大概是那时候产生了新系统不会再支持vb6的印象了吧。能用就好……突然发现一个问题,我手里的vb6还是五元快乐盘来着的,可现在连光驱都找不到了。不知道msdn上有没有。感谢告知。
ddos
(dd)
2020 年8 月 29 日 08:48
4
其实 从上个问题 【纯文本】在文本文件中批量搜索一批字符串 ,我就好奇,你的 VSC 难道只是 Code Editor 吗? 如果是 IDE 随便编一个 岂不是很方便。。。总比 用批处理 要方便的多。。。
1 个赞
future_93
(running in the 93s)
2020 年8 月 29 日 08:08
3
CAT……这是Linux的命令?
说到不纠结,这个我双手赞同。后来也确实是靠查找替换和比对字典强行继续下去了。现在纠结这个主要是我还有不少同类的工作,所以有点想做个傻瓜化的工具。
rodger
(Rodger Yuan)
2020 年8 月 29 日 11:51
10
我之前提到的,让你装个cmder。不能叫linux命令,是gnu的软件,linux标配而已,实际上,几乎所有工具都有win的二进制编译成果。grep,sed,awk用来操作文本数据非常方便,强烈建议你学学。不指望一口气全学,用一点学一点就好。
2 个赞
你可以用 vbscript 来处理。在 windows 里面,只要把 vb 代码写在 .vbs 文件里面,这个 vbs 文件就能够执行了。支持从 win98 到 win10 所有版本。
rem test.vbs
msgbox "hello, there."
双击运行,或者用 cscript 运行:
C:\> cscript test.vbs
windows 里面这样的黑科技很多,比如一个 html 改名 .hta 扩展名就能打开一个独立的窗口。
1 个赞
future_93
(running in the 93s)
2020 年8 月 29 日 09:28
8
感觉vbscript感觉和我印象中的basic语言不大一样啊。容我这两天有空时研究研究。非常感谢~
future_93
(running in the 93s)
2020 年8 月 29 日 09:10
5
你猜怎么着?你猜中了!其实我除了basic还剩点基础没忘,其它的语言基本上就只是看得懂的程度而已……然后因为我的basic还停留在vb6的时代……后面我觉得可以不用说下去了吧。
至于我的vscode?那是拿来写md的。
补充一下,这是一段 vbscript 里面处理文件的代码:
Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file.txt"
strTemp = "c:\test\temp.txt"
Set objFile = objFS.GetFile(strFile)
Set objOutFile = objFS.CreateTextFile(strTemp,True)
Set ts = objFile.OpenAsTextStream(1,-2)
Do Until ts.AtEndOfStream
strLine = ts.ReadLine
' do something with strLine
objOutFile.Write(strLine)
Loop
objOutFile.Close
ts.Close
objFS.DeleteFile(strFile)
objFS.MoveFile strTemp,strFile
更具体的文件调用你可以网上搜索一下,应该有很多资料。
1 个赞
future_93
(running in the 93s)
2020 年8 月 29 日 12:14
11
唔,一开始我没理解那条回复……感觉需要研究的东西像滚雪球一样越来越多了呢,总之非常感谢,容我去研究研究
ddos
(dd)
2020 年8 月 29 日 13:10
13
rodger:
我之前提到的,让你装个cmder
我以前 也用 Cmder
,但是,后来我发现 Matlab
的 万能 之后,我就基本都用 Matlab 了。。。只有一些需要脱离环境的,我更倾向与 使用 PowerShell
,感觉更灵活
2 个赞
那些命令跟 bat 一样恶心。。我用 linux 20 年了——至今不想碰那堆 linux 命令。什么事情都是用桌面工具或者 python 写脚本搞定。
1 个赞