找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25954|回复: 5

[文本处理] 批处理怎样对多个文本内的指定字符串进行替换并按指定格式合并?

[复制链接]
发表于 2017-3-23 13:51:10 | 显示全部楼层 |阅读模式
【求助】按照格式合并文件!
有N多NC文件放在单独的文件夹里面,还可能会有很多文件夹都是以G开头,先要把NC文件里面的“G54”替换为“文件夹名称”,然后文件头尾不变,把其他部分合并到一起,放到合并文件夹里面,已经做好了个例子,请高手做个批处理文件,谢谢了!
发表于 2017-3-23 16:18:01 | 显示全部楼层
本帖最后由 WHY 于 2017-3-24 11:11 编辑
  1. @if(0)==(0) echo off
  2. md 合并 2>nul
  3. dir /b /s *.nc | findstr "\\G[0-9][0-9]*\\[^\\]*$" | cscript //nologo //e:jscript "%~f0" > 合并\result.nc
  4. pause & goto :EOF
  5. @end

  6. var fso = new ActiveXObject('Scripting.FileSystemObject');
  7. var s = '';

  8. while(!WSH.StdIn.AtEndofStream) {
  9.     var strFile = WSH.StdIn.ReadLine();
  10.     var strFolder = strFile.replace(/.+?\\([^\\]+)\\[^\\]+$/, '$1');

  11.     var objFile = fso.OpenTextFile(strFile, 1);
  12.     var str = objFile.ReadAll().replace(/(\r\n)+$/, '');
  13.     var arr = str.split('\r\n');
  14.     objFile.Close();

  15.     if(typeof(s1) == 'undefined'){
  16.         var s1 = arr.slice(0, 6).join('\r\n') + '\r\n';
  17.         var s3 = arr.slice(-3).join('\r\n');
  18.     }

  19.     var s2 = arr.slice(6, -3).join('\r\n');
  20.     s += s2.replace(/\bG54\b/g, strFolder) + '\r\n';
  21. }

  22. WSH.Echo(s1 + s + s3)
复制代码

评分

参与人数 1技术 +1 收起 理由
wlt369 + 1 谢谢

查看全部评分

发表于 2017-3-23 16:44:37 | 显示全部楼层
本帖最后由 pcl_test 于 2017-3-24 11:46 编辑
  1. @echo off
  2. set r=[IO.File]::ReadAllText($_.FullName, [Text.Encoding]::Default)
  3. powershell ^
  4.     $s='';dir . G*^|?{$_.PSIsContainer}^|%%{dir $_ *.nc^
  5.     ^|%%{(%r% -replace '\bG54\b',$_.Directory.Name) -match '^((.+\n){6})([\s\S]+?)((.+\n){2}.+)\s*$'^|out-null;^
  6.     if(!$n){$a=$matches[1];$b=$matches[4]}$n=1;$s+=$matches[3]^}};^
  7.     $a+$s+$b^|out-file '合并.nc' -encoding Default
  8. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
codegay + 1 1
wlt369 + 1 谢谢

查看全部评分

 楼主| 发表于 2017-3-23 18:21:33 | 显示全部楼层
回复 3# pcl_test



谢谢楼上两位!
小弟不才,再问一下,执行批处理后显示如图,任意键后就退出了!我想要的是新建一个“合并”的文件夹,把合并后的“合并.NC”文件放到里面,谢谢了!
发表于 2017-3-24 11:13:17 | 显示全部楼层
回复 4# wlt369


    已修改
发表于 2017-3-24 11:14:50 | 显示全部楼层
  1. @echo off
  2. md 合并 2>nul
  3. PowerShell -c "$arr=dir G*\*.nc|%%{(type $_) -replace '\bG54\b',$_.Directory.Name};$str=$arr -join "`r`n";$str -replace '(?n:[^\r\n]+\r\n){2}%%(?n:\r\n)+%%\r\n(?n:[^\r\n]+\r\n){5}', ''" > 合并\result.nc
  4. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 23:35 , Processed in 0.019895 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表