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

[文本处理] 【已解决】批量提取N个文本的倒数任意行内容??

本帖最后由 屡败屡战 于 2018-3-6 18:01 编辑

我想求批处理代码,可以实现以下操作:
1、批量提取某文件夹下N个文本的任意行内容,(注意:这个任意行是“倒数”的),任意行的行数不确定,行数最好由自己定(请在代码中注明如何修改行数),输出结果到另一新文本文件中(输出结果.txt)
2、最好输出文件名,作为标识,即在输出结果中,其左列为文件名,右列为提取的倒数的任意行的内容
3、另外,提取的任意行的内容,是否可以连续“两行”或“三行”的提取内容,这个“行”可以是“连续的”,也可以是“不连续”的。但是要输出文件名,作为标识。

同理的情况下,上述的情况下,若提取“正数”的行,应该怎么提取,请求与上述“倒数行”的要求一样

我在网上搜索,有些代码只能输出指定行的内容,但不能输出文件名,望大神门不吝赐教!!

已修改,输入数字时,按提示照猫画虎输吧

TOP

WHY老师好:
老师的代码只限制了提取3行,请教下,如何能够提取多行呢,该如何修改?

TOP

本帖最后由 WHY 于 2018-2-26 01:53 编辑
  1. @echo off
  2. rem 源目录
  3. set "srcDir=E:\Test"
  4. echo;输入数字,逗号隔开,如输入:2,5,-1,-3 提取顺数第2行、第5行,倒数第1行、第3行。
  5. set /p s=
  6. (for %%i in ("%srcDir%\*.txt") do (
  7.     setlocal enabledelayedexpansion
  8.     for /f "delims=" %%j in ('type "%%i"') do (
  9.         set /a n+=1 & set "_!n!=%%j"
  10.     )
  11.     for %%j in (!s!) do (
  12.         set /a "x = (n+1) * (%%j>>31&1) + %%j"
  13.         for %%k in (!x!) do (echo;%%~ni !_%%k!)
  14.     )
  15.     endlocal
  16. )) > Result.Log
  17. pause
复制代码
1

评分人数

TOP

本帖最后由 屡败屡战 于 2018-2-24 09:39 编辑

CrLf 及各位老师好:
抱歉,我要求的是提取N个文本,而不是单文本
且“输出文本”的左列为文件标题(便亍识别),右列为提取的内容
行数的提取规则:最好可以“同时提取”正数行(随机行数)和倒数行(随机行数)的内容
望求个“纯”的批处理代码,使其可以在其它盘符运行。

TOP

混编走一个
  1. @mshta http://bathome.net/s/hta/index.html?string "var arr=WSH.StdIn.ReadAll().split(/\r\n/);[ arr[4], arr[10], arr[arr.length-8] ]" <测试.txt >输出结果.txt
复制代码
例如要获取第 5、11、倒数第 7 行,则写成 [ arr[4], arr[10], arr[arr.length-8] ]

TOP

ivor老师及论坛名位大伽过年好!!祝新年快乐!!!
      此代码运行完美,但我这里有些小问题,我的计算机好像不太支持“powershell 代码”(我安装powershell 文件好多遍,均安装失败)。于是我将此代码“另存为”.bat时,其代码运行只针对“桌面”的文件夹有效。但在其它盘符运行,则无效。自己估计,好傢是本地计算机不支持“powershell 代码”所致。
      望求个“纯”的批处理代码,使其可以在其它盘符运行。

TOP

本帖最后由 ivor 于 2018-2-23 14:04 编辑
变量参考例子:
num=1..3    提取2(正数)至4(正数)行内容
num=3    提取第4(正数)行内容
num=-3    提取-3(倒数)行内容
num=-1..-3    提取-1(倒数)至-3(倒数)行内容
num=-1..3    提取-1(倒数)和 1 至 4(正数)行内容   慎用:不建议
num=1,5,9    提取2,6,10(正数)行内容
num=-1,-5,-9    提取-1,-5,-9(倒数)行内容
  1. <# :
  2. @echo off
  3. rem 增强代码兼容性,代码保存为 ".bat"、".cmd"、".ps1"均可执行
  4. powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. more +8 "%~f0" >"%~dpn0.ps1"
  6. powershell -File "%~dpn0.ps1"
  7. del "%~dpn0.ps1" & pause & exit /b
  8. #>
  9. del 输出结果.txt -ErrorAction "SilentlyContinue"
  10. $num = 1..3
  11. dir *.txt | foreach {
  12.     $line = get-content "$_"
  13.         foreach ($l in $line[$num])
  14.         {
  15.             -Join($_.Name, " ", $l) | out-file -Append "输出结果.txt"
  16.         }
  17. }
复制代码
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

返回列表