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

回复 26# 沸羊羊
这个根本不用安装,直接用。支持主流系统,你把sed直接跟要替换的文件放一起,然后运行那个批处理就完事。sed有很多版本,你下个免杀版的就行。

如果你们公司杀软很厉害,那就安个虚拟机,在虚拟机里操作替换,然后把资料从虚拟机里取出来。就下载那个virtual PC2007虚拟机才30M,再下载个30M的xp系统,搭建个虚拟机,在里边随便搞。还可以研究病毒。

TOP

回复 25# happy886rr


    您好,第一:由于公司后台杀毒软件,我还没下载sed.exe,就给我直接删掉了
               第二:由于需要支持win7、win8、win xp,所以,sed 能全面支持吗?
               第三:sed.exe能不能支持静默安装?如果可以,我可以尝试在安装包中加入这个程序安装,然后再调用

TOP

回复 24# 沸羊羊
一行就完事,何必搞这么复杂,下载第三方sed
  1. for /f "tokens=1-3 delims=:," %%a in ('findstr /n .* a.txt') do (sed -i "%%as/,%%b,/,%%c,/" b.txt)
复制代码

TOP

回复 22# GNU


    您好,我已经把文件和想要的效果发出,麻烦您给个脚本,急求,拜谢!

TOP

回复 22# GNU

我就是想根据a.txt里面的数据,替换掉b.txt里面的字符串,然后生成test.txt,a.txt中的字符串,在b.txt中没有的话,就跳过

TOP

请把最新需求的a.txt和b.txt两个文件以及希望得到的新文件c.txt打包压缩传上来

TOP

回复 20# 沸羊羊


很遗憾,那个代码是根据你之前的需求编写的:a.txt和b.txt的行一一对应
你现在新的需求根本不是一一对应,所以这个代码无法正常处理。

TOP

本帖最后由 沸羊羊 于 2016-8-25 10:39 编辑

回复 19# GNU


    您好:
             代码执行结果是:在b.txt中,先查找到 “111111”,然后替换为“1”,再执行第二行,查找“111111”,此时,由于“111111”已经全部替换为“1”了,所以找不到,这样就是全部替换为“1”了
             我要的效果是: a.txt中,有几行包含“111111”的,就在b.txt中,复制包含“111111”的行,然后,根据a.txt中第二行的值,一一替换
             具体说明,可以看 我在18楼回复您时,临时文件的替换效果

TOP

回复 18# 沸羊羊


    我是根据3楼文件写的代码,请举例说明代码执行的结果和你希望的结果具体差别在哪里。

TOP

回复 17# GNU


    大神您好,暂时我还看不懂您写的脚本都是什么意思,但是行复制是做到了,但是你的脚本会把每行的字符串都替换掉,这样的话,我的“被替换”的字符串相同,“替换值”不同,就只替换了一个

可能表达的不是特清楚
a.txt                                  b.txt                                             临时文件
111111  1                          ,a,b,c,111111,s,f,g                        ,a,b,c,111111,s,f,g
111111   111                                                                        ,a,b,c,111111,s,f,g

由于 a.txt 中,有两个 111111 ,所以我现在生成的临时文件中,已经将b.txt中包含字符串“111111”的行做了复制
现在我就需要 一行将 “111111”替换为“1”,一行替换为“111”

或者我想到一个折中的办法,就是每次只替换查找到的第一个字符串,其余的都不替换,只是我不会写这个脚本,麻烦您了,谢谢!

TOP

回复 15# 沸羊羊
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in ('type "b.txt"') do (
  4.     set LineB=%%a
  5.     set /p LineA=
  6.     for /f "tokens=1-2 delims=," %%x in ("!LineA!") do (
  7.         set LineNew=!LineB:%%x=%%y!
  8.     )
  9.     echo !LineNew!
  10. ))<"a.txt" > "c.txt"
复制代码

TOP

回复  沸羊羊

没找到本来就不执行写入tmpfile,一行一行的替换需要考虑有两列及其以上的字段相同时,会 ...
xxpinqz 发表于 2016-8-24 13:18



    您好,如果不需要考虑有两列或以上字段相同的情况,能否做到行替换?谢谢

TOP

回复 14# GNU


    我试了下,确实可以,只是执行太慢,以为是卡死在那了,还有最后一个问题,能不能做到一行行的替换,而不是使用tokens=1-8,限定了输出列数?

TOP

回复 12# 沸羊羊


判断有没有查找到字符串呢?没有的话则跳过,有的话,则输出到临时文件中

代码14行到16行就是为了实现这个功能

TOP

回复 12# 沸羊羊

没找到本来就不执行写入tmpfile,一行一行的替换需要考虑有两列及其以上的字段相同时,会替换其它的值。
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

返回列表