[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 aloha20200628 于 2024-10-27 16:17 编辑

回复 19# 66899981

简单作了一个测试》用8楼示例中的510组匹配数超长字符串
|000004| |000020| ... |605018| |605058|
直接写入(前后没有空格)单行文件 "匹配数超长字符串.txt",再用这个 510 组匹配数超长字符串 替换如下 “data.txt” 文件中包含的 * 字符:
  1. abc*xyz
  2. *xyz
  3. abc*
  4. *
  5. 123456
复制代码
运行17楼给出的 test.bat,结果是》源文件 data.txt 变为如下内容:
  1. abcxyz
  2. xyz
  3. abc
  4. 123456
复制代码
请楼主确认上述测试方法及其结果与要求是否一致?

TOP

回复  66899981

以下代码存为 test.bat 运行,把整个匹配数字长串 |4| |20| |26| |70| |07| ... 存入 “ ...
aloha20200628 发表于 2024-10-27 13:16



    提示Microsoft  JScript 编译错误;缺少 '/’

TOP

啊 ,为啥要这么长的???

TOP

本帖最后由 aloha20200628 于 2024-10-27 16:03 编辑

回复 11# 66899981

以下代码存为 test.bat 运行,把整个匹配数字长串 |4| |20| |26| |70| |07| ... 存入 “匹配数超长字符串.txt” 这个单行文件,与 test.bat 和 data.txt 同目录即可...
运行结果会覆写源 data.txt,建议先备份源文件。
  1. @set @x=1 /* &@echo off
  2. type "匹配数超长字符串.txt"|cscript /e:jscript "%~f0" "data.txt"
  3. pause&exit/b */
  4. kwline=WSH.stdin.readall().replace('\r\n','').replace(/\|/g,'\\|');
  5. v=WSH.arguments, fso=WSH.createObject('Scripting.FileSystemObject');
  6. fp=fso.OpenTextFile(v(0),1), alltxt=fp.readall(), fp.close(), reg='/'+kwline+'/ig';
  7. fp=fso.OpenTextFile(v(0),2,true), fp.write(alltxt.replace(eval(reg),'')), fp.close(), WSH.quit();
复制代码

TOP

回复  66899981


   keywords.txt

什么超限制了?
77七 发表于 2024-10-27 12:19



    用两个文本对比也可以,不知道对比的文本数据太多是不是也会超长限制,并在原有的DATA.TXT里直接删除关键词的行 不需要新建文档  谢谢您

TOP

回复 14# 66899981


   说可能是说不清楚了...请提供一个样本吧,处理前.txt 处理后.txt 关键词.txt,上传到网盘
bat小白,请多指教!谢谢!

TOP

回复  66899981


   keywords.txt

什么超限制了?
77七 发表于 2024-10-27 12:19



    就是对比的数据太多了

TOP

回复 12# 66899981


   keywords.txt
  1. |000004|
  2. |000020|
  3. |000026|
复制代码


什么超限制了?
bat小白,请多指教!谢谢!

TOP

回复 11# 77七

感谢您的答复,目前就是字符串超出限制了  所以如何解决这个问题呢?

TOP

回复 9# 66899981


   把关键字写入 keywords.txt 每行一个
  1. findstr /vg:"keywords.txt" "data.txt" > "out.txt"
复制代码
bat小白,请多指教!谢谢!

TOP

回复  66899981

又是一个猜谜...似乎是用findstr匹配多个 ‘|n|’ 组成的整个字符串长度超限了,如是就 ...
aloha20200628 发表于 2024-10-27 11:47



    你好,请问这种如何能解决呢?是超长限制了

TOP

楼主是不是想删除 包含 |数字| 的行?
77七 发表于 2024-10-27 11:31



    就是删除指定关键词后删除关键词的整行数据,但是目前是很多方法都用了,只要关键词多了之后就不管用了

TOP

本帖最后由 66899981 于 2024-10-27 11:57 编辑
回复  66899981

或用以下方法,把 一长串匹配数 填入 for...() 里,遍历提取逐一删除...
aloha20200628 发表于 2024-10-27 11:27



    echo off &findstr /lv "|000004| |000020| |000026| |000070| |000407| |000408| |000419| |000421| |000503| |000533| |000545| |000548| |000559| |000593| |000600| |000619| |000655| |000657| |000661| |000668| |000670| |000681| |000698| |000701| |000703| |000708| |000722| |000728| |000729| |000733| |000735| |000751| |000752| |000753| |000788| |000789| |000809| |000810| |000812| |000815| |000816| |000819| |000821| |000822| |000877| |000883| |000888| |000890| |000905| |000906| |000912| |000915| |000917| |000929| |000930| |000948| |000953| |000960| |000968| |000972| |000985| |000997| |000999| |001203| |001205| |001216| |001218| |001301| |001332| |001380| |002011| |002015| |002028| |002029| |002038| |002039| |002040| |002055| |002063| |002064| |002075| |002080| |002085| |002092| |002093| |002098| |002105| |002107| |002121| |002132| |002138| |002148| |002150| |002158| |002162| |002165| |002171| |002178| |002197| |002202| |002212| |002218| |002219| |002223| |002226| |002236| |002253| |002255| |002262| |002278| |002283| |002284| |002298| |002299| |002305| |002312| |002327| |002332| |002338| |002344| |002347| |002374| |002391| |002415| |002418| |002419| |002424| |002429| |002434| |002436| |002437| |002441| |002452| |002457| |002462| |002475| |002480| |002492| |002532| |002534| |002539| |002552| |002566| |002571| |002574| |002577| |002578| |002582| |002609| |002611| |002612| |002630| |002644| |002645| |002670| |002672| |002676| |002686| |002690| |002706| |002709| |002728| |002735| |002758| |002772| |002780| |002785| |002789| |002808| |002855| |002870| |002876| |002880| |002885| |002902| |002908| |002909| |002911| |002982| |002988| |003005| |003012| |003022| |003029| |003035| |003040| |200020| |200026| |200468| |300003| |300017| |300022| |300030| |300040| |300053| |300059| |300070| |300073| |300087| |300111| |300115| |300122| |300130| |300138| |300142| |300146| |300147| |300168| |300173| |300174| |300177| |300187| |300190| |300193| |300196| |300208| |300213| |300220| |300221| |300265| |300270| |300271| |300289| |300291| |300300| |300303| |300320| |300322| |300328| |300348| |300351| |300358| |300368| |300385| |300393| |300400| |300404| |300412| |300413| |300439| |300457| |300474| |300475| |300500| |300513| |300527| |300533| |300546| |300553| |300553| |300559| |300569| |300584| |300592| |300595| |300601| |300603| |300618| |300625| |300632| |300633| |300634| |300661| |300676| |300679| |300686| |300693| |300700| |300701| |300712| |300722| |300726| |300736| |300738| |300766| |300770| |300774| |300812| |300850| |300859| |300882| |300883| |300889| |300895| |300922| |300938| |300952| |300953| |300958| |300961| |300964| |300992| |301015| |301023| |301038| |301039| |301069| |301072| |301089| |301102| |301118| |301130| |301138| |301148| |301162| |301176| |301182| |301229| |301236| |301262| |301282| |301293| |301305| |301312| |301328| |301362| |301397| |301448| |301508| |301511| |301538| |301568| |400061| |400062| |430008| |430023| |430243| |430512| |430568| |430581| |600055| |600056| |600059| |600062| |600063| |600084| |600087| |600095| |600099| |600105| |600120| |600141| |600161| |600188| |600199| |600237| |600269| |600282| |600300| |600302| |600313| |600327| |600332| |600352| |600361| |600365| |600395| |600397| |600408| |600409| |600422| |600429| |600433| |600444| |600467| |600470| |600476| |600480| |600498| |600502| |600503| |600519| |600520| |600523| |600535| |600546| |600549| |600551| |600561| |600562| |600566| |600575| |600578| |600584| |600594| |600595| |600602| |600633| |600658| |600664| |600666| |600679| |600693| |600711| |600718| |600725| |600740| |600745| |600749| |600750| |600771| |600777| |600787| |600797| |600801| |600803| |600805| |600812| |600826| |600828| |600839| |600841| |600850| |600864| |600869| |600872| |600874| |600881| |600894| |600955| |600963| |600965| |600970| |600980| |600993| |601011| |601088| |601208| |601268| |601368| |601369| |601399| |601598| |601619| |601633| |601666| |601668| |601718| |601777| |601799| |601825| |601918| |601956| |601965| |601975| |603006| |603012| |603021| |603023| |603035| |603041| |603078| |603079| |603086| |603095| |603125| |603128| |603136| |603156| |603163| |603181| |603182| |603183| |603186| |603196| |603216| |603219| |603228| |603231| |603275| |603311| |603396| |603408| |603501| |603506| |603516| |603529| |603535| |603536| |603568| |603586| |603595| |603600| |603601| |603610| |603656| |603658| |603660| |603688| |603697| |603699| |603725| |603727| |603788| |603813| |603817| |603909| |603916| |603919| |603931| |603931| |603948| |603976| |603983| |603986| |605001| |605005| |605009| |605018| |605058|" data.txt>0.0
move /y 0.0 data.txt
pause&exit/b

还是不行 DATA.TXT文件里删除不了关键词整行  数据太多就不行了  以上的数据是可以删除的 但是关键词再多些就不行了

TOP

本帖最后由 aloha20200628 于 2024-10-27 21:46 编辑

回复 3# 66899981

又是一个猜谜帖...似乎是用findstr匹配多个 ‘|n|’ 组成的整个字符串长度超限了...

TOP

楼主是不是想删除 包含 |数字| 的行?
  1. findstr /v "|[0-9][0-9]*|" data.txt > out.txt
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表