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


截取文件中第n1至n2行的纯P老话题,似乎并无完解。
开启变量延迟+for/f skip参数,虽然效率不错,但会拦截文件中的!字符相关字段;
关闭变量延迟而借助find/findstr加注文本行序号的方法也会丢失文件中的[]字符或:字符。
还是给一个用纯P包装jscript代码的批处理脚本更便于使用,没有纯P的诸端限制,而且因采用字符集437后竟可通吃多种常见编码文件,使输出文件自动保持与输入文件编码一致...
以下代码存为test.bat运行
命令行调用参数》test.bat "源文件路径文件名" 起始行号 终止行号
生成结果文件 = "源文件路径文件名.new"
  1. @set @v=1 //&if "%~3" neq "" cscript /e:jscript "%~f0" "%~1" %2 %3 &exit/b
  2. v = WSH.arguments, as = WSH.createobject('adodb.stream');
  3. as.mode=3, as.type=2, as.charset='437', as.open, as.loadfromfile(v(0));
  4. alllines = as.readtext().split('\r\n'), as.close;
  5. nb = (v(1)<1)? 1: v(1), ne = (v(2)>=alllines.length)? alllines.length: v(2);
  6. if (nb>ne) WSH.quit();
  7. alllines = alllines.slice(nb-1,ne);
  8. as.open, as.writetext(alllines.join('\r\n')), as.savetofile(v(0)+'.new',2), as.close;
  9. WSH.quit();
复制代码
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP


6楼代码用于 '截取' n1-n2区间行,是掐头去尾取中段,test.bat应更名为 "取中段.bat"
再给一段代码用于 '删除' n1-n2区间行,是留头留尾去中段,test.bat可取名为 "去中段.bat" ,命令行用法如同6楼命令行参数
jscript代码中弃用splice()方法是因其低效,还不如用slice()+concat()
再复课一遍》因采用437字符集编码,可不必在批处理脚本中特别打理与源文件编码对应的chcp...码页切换,用一个“437”即可通吃ansi/utf-8/utf-8+BOM/gbk/gb2312/...
  1. @set @v=1 //&if "%~3" neq "" cscript /e:jscript "%~f0" "%~1" %2 %3 &exit/b
  2. v = WSH.arguments, as = WSH.createobject('adodb.stream');
  3. as.mode=3, as.type=2, as.charset='437', as.open, as.loadfromfile(v(0));
  4. alllines = as.readtext().split('\r\n'), as.close;
  5. nb = (v(1)<1)? 1: v(1), ne = (v(2)>=alllines.length)? alllines.length: v(2);
  6. if (nb>ne) WSH.quit();
  7. for (; alllines.slice(-1)==''; alllines.pop());
  8. ab = alllines.slice(0, nb-1), ae = alllines.slice(ne), alllines = ab.concat(ae);
  9. as.open, as.writetext(alllines.join('\r\n'));
  10. as.savetofile(v(0)+'.new',2), as.close; WSH.quit();
复制代码

TOP

本帖最后由 aloha20200628 于 2024-3-16 13:32 编辑


补缺》采用437字符集编码的优势有一个前提,是限于处理文件中的单字节ascii字符,其有效用法例如删除utf-8+BOM编码文件头标,删除文件尾部空行...
虽然adodb.stream可以二进制方式直接处理字节数据,但要比处理字符串麻烦,尤其是启用正则匹配...

TOP

返回列表