标题: [文本处理] 【已解决】批量提取N个文本的倒数任意行内容?? [打印本页]
作者: 屡败屡战 时间: 2018-2-23 09:52 标题: 【已解决】批量提取N个文本的倒数任意行内容??
本帖最后由 屡败屡战 于 2018-3-6 18:01 编辑
我想求批处理代码,可以实现以下操作:
1、批量提取某文件夹下N个文本的任意行内容,(注意:这个任意行是“倒数”的),任意行的行数不确定,行数最好由自己定(请在代码中注明如何修改行数),输出结果到另一新文本文件中(输出结果.txt)
2、最好输出文件名,作为标识,即在输出结果中,其左列为文件名,右列为提取的倒数的任意行的内容
3、另外,提取的任意行的内容,是否可以连续“两行”或“三行”的提取内容,这个“行”可以是“连续的”,也可以是“不连续”的。但是要输出文件名,作为标识。
同理的情况下,上述的情况下,若提取“正数”的行,应该怎么提取,请求与上述“倒数行”的要求一样
我在网上搜索,有些代码只能输出指定行的内容,但不能输出文件名,望大神门不吝赐教!!
作者: ivor 时间: 2018-2-23 13:20
本帖最后由 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(倒数)行内容
- <# :
- @echo off
- rem 增强代码兼容性,代码保存为 ".bat"、".cmd"、".ps1"均可执行
- powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- more +8 "%~f0" >"%~dpn0.ps1"
- powershell -File "%~dpn0.ps1"
- del "%~dpn0.ps1" & pause & exit /b
- #>
- del 输出结果.txt -ErrorAction "SilentlyContinue"
-
- $num = 1..3
-
- dir *.txt | foreach {
- $line = get-content "$_"
- foreach ($l in $line[$num])
- {
- -Join($_.Name, " ", $l) | out-file -Append "输出结果.txt"
- }
- }
复制代码
作者: 屡败屡战 时间: 2018-2-23 18:07
ivor老师及论坛名位大伽过年好!!祝新年快乐!!!
此代码运行完美,但我这里有些小问题,我的计算机好像不太支持“powershell 代码”(我安装powershell 文件好多遍,均安装失败)。于是我将此代码“另存为”.bat时,其代码运行只针对“桌面”的文件夹有效。但在其它盘符运行,则无效。自己估计,好傢是本地计算机不支持“powershell 代码”所致。
望求个“纯”的批处理代码,使其可以在其它盘符运行。
作者: CrLf 时间: 2018-2-23 23:43
混编走一个- @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] ]
作者: 屡败屡战 时间: 2018-2-24 09:37
本帖最后由 屡败屡战 于 2018-2-24 09:39 编辑
CrLf 及各位老师好:
抱歉,我要求的是提取N个文本,而不是单文本
且“输出文本”的左列为文件标题(便亍识别),右列为提取的内容
行数的提取规则:最好可以“同时提取”正数行(随机行数)和倒数行(随机行数)的内容
望求个“纯”的批处理代码,使其可以在其它盘符运行。
作者: WHY 时间: 2018-2-24 11:40
本帖最后由 WHY 于 2018-2-26 01:53 编辑
- @echo off
-
- rem 源目录
- set "srcDir=E:\Test"
-
- echo;输入数字,逗号隔开,如输入:2,5,-1,-3 提取顺数第2行、第5行,倒数第1行、第3行。
- set /p s=
-
- (for %%i in ("%srcDir%\*.txt") do (
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('type "%%i"') do (
- set /a n+=1 & set "_!n!=%%j"
- )
- for %%j in (!s!) do (
- set /a "x = (n+1) * (%%j>>31&1) + %%j"
- for %%k in (!x!) do (echo;%%~ni !_%%k!)
- )
- endlocal
- )) > Result.Log
-
- pause
复制代码
作者: 屡败屡战 时间: 2018-2-24 17:20
WHY老师好:
老师的代码只限制了提取3行,请教下,如何能够提取多行呢,该如何修改?
作者: WHY 时间: 2018-2-24 18:35
已修改,输入数字时,按提示照猫画虎输吧
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |