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

[文本处理] BAT批量提取cfg指定内容上方首列数字合并生成新的txt

[复制链接]
发表于 2020-9-29 02:20:20 | 显示全部楼层 |阅读模式
需求:将多个文件夹路径发帖1-发帖30
C:\Users\Administrator\Desktop\发帖1\Save目录中,提取ListBoxes.cfg内容首行至第一个“-----split-----“”中的第一列的数字内容,生成新的TXT文档保存。

ListBoxes.cfg文件内容如下:

6982151165 大家好
6978302768 你好
-----split-----
+1
+2
+3
-----split-----
+4
+5
+6
-----split-----



提取后的内容为:
6982151165
6978302768
保存至收集.txt
 楼主| 发表于 2020-9-29 02:26:36 | 显示全部楼层
在线等大神解答,不知能否看明白,
就是我想批量提取
C:\Users\Administrator\Desktop\发帖1\Save\ListBoxes.cfg
C:\Users\Administrator\Desktop\发帖2\Save\ListBoxes.cfg
C:\Users\Administrator\Desktop\发帖3\Save\ListBoxes.cfg
一直到
C:\Users\Administrator\Desktop\发帖30\Save\ListBoxes.cfg

中的内容大概如下
6982151165 大家好
6978302768 你好
-----split-----
+1
+2
+3
-----split-----
+4
+5
+6
-----split-----


只提取如下内容中的第一列的数字:
6982151165 大家好
6978302768 你好
-----split-----


在桌面生成收集.txt
提取后想收集的内容就是:
6982151165
6978302768
发表于 2020-9-29 16:51:26 | 显示全部楼层
本帖最后由 yhcfsr 于 2020-9-29 16:54 编辑
  1. @echo off

  2. >"%USERPROFILE%\desktop\收集.txt" (for /f "delims=" %%a in ('dir /a-d/b/s *.cfg') do (
  3.         call :GetContent "%%~a"       
  4. ))
  5. start "" "%USERPROFILE%\desktop\收集.txt"
  6. exit /b

  7. :GetContent
  8. for /f "useback" %%i in ("%~1") do (
  9.         if "%%~i" equ "-----split-----" goto :eof
  10.         echo;%%i
  11. )
复制代码
用法: 保存为BAT,放在桌面执行
 楼主| 发表于 2020-9-29 18:50:16 | 显示全部楼层
回复 3# yhcfsr


    您好,我试了,这个采集的并非ListBoxes.cfg这个文件的。
好像采集的是文件夹第一个txt文本的
 楼主| 发表于 2020-9-29 18:52:02 | 显示全部楼层
回复 3# yhcfsr


    是不是上述命令中,哪些地方是填写文件夹的呢。
 楼主| 发表于 2020-9-29 19:06:04 | 显示全部楼层
@echo off

>"%USERPROFILE%\desktop\收集.txt" (for /f "delims=" %%a in ('dir /a-d/b/s ListBoxes.cfg') do (
        call :GetContent "%%~a"       
))
start "" "%USERPROFILE%\desktop\收集.txt"
exit /b

:GetContent
for /f "useback" %%i in ("%~1") do (
        if "%%~i" equ "-----split-----" goto :eof
        echo;%%i
)

我修改成上述的,倒是可以提取这个文件了,但是我发现只提取了一个路径C:\Users\Administrator\Desktop\发帖1\Save\ListBoxes.cfg

其他的没一起提取
 楼主| 发表于 2020-9-29 19:06:25 | 显示全部楼层
回复 3# yhcfsr


   
@echo off

>"%USERPROFILE%\desktop\收集.txt" (for /f "delims=" %%a in ('dir /a-d/b/s ListBoxes.cfg') do (
        call :GetContent "%%~a"      
))
start "" "%USERPROFILE%\desktop\收集.txt"
exit /b

:GetContent
for /f "useback" %%i in ("%~1") do (
        if "%%~i" equ "-----split-----" goto :eof
        echo;%%i
)

我修改成上述的,倒是可以提取这个文件了,但是我发现只提取了一个路径C:\Users\Administrator\Desktop\发帖1\Save\ListBoxes.cfg

其他的没一起提取
 楼主| 发表于 2020-9-29 19:17:05 | 显示全部楼层
回复 3# yhcfsr

@echo off

>"%USERPROFILE%\desktop\收集.txt" (for /f "delims=" %%a in ('dir /a-d/b/s ListBoxes.cfg') do (
        call :GetContent "%%~a"       
))
start "" "%USERPROFILE%\desktop\收集.txt"
exit /b

:GetContent
for /f "useback" %%i in ("%~1") do (
        if "%%~i" equ "-----split-----" goto :eof
        echo;%%i
)



    刚才又试了一下,改成如上后,我发现只有当ListBoxes.cfg这个文件手动输入数字保存,发生改变后才会被提取,否则不提取。 不知道是什么原因
发表于 2020-9-29 21:19:31 | 显示全部楼层
回复 8# 308131375


请把3楼最新代码保存为 test.bat 并放在 C:\Users\Administrator\Desktop 这个目录下
然后参考Q-04和Q-05把bat文件和cfg文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

如果还是不行,请把 test.bat 和 cfg 文件打包压缩传上来我试试。
 楼主| 发表于 2020-9-30 01:15:37 | 显示全部楼层
回复 9# Batcher


    您好,因为附件上传限制我无法上传,
我把文件放到http://suo.im/5sU6oh这个链接下载了。
您查看下。
发表于 2020-9-30 09:23:26 | 显示全部楼层
回复 10# 308131375


    我打不开这个链接,你传到百度网盘试试?不用打包太多文件,有两三个就够了
 楼主| 发表于 2020-9-30 11:05:15 | 显示全部楼层
回复 11# Batcher
发表于 2020-9-30 11:23:56 | 显示全部楼层
回复 12# 308131375


    你这个ListBoxes.cfg是UTF-8编码,请试试9楼的方法改成ANSI编码。
 楼主| 发表于 2020-9-30 14:09:22 | 显示全部楼层
回复 13# Batcher


    这个是程序自动生成的。即使更改后,程序不久就又会变回原样。
发表于 2020-9-30 16:49:59 | 显示全部楼层
  1. #&cls&@powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause&exit

  2. Get-ChildItem -Path './' -Include ('ListBoxes.cfg') -Recurse|ForEach-Object {
  3.     Get-Content -Path $_ -Encoding UTF8|ForEach-Object{
  4.        if( $_ -eq '-----split-----') { break;}
  5.        $_ -replace '\D.*' >> $env:USERPROFILE'\desktop\收集.txt'
  6.     }
  7. }
复制代码
用法:保存为BAT,适用于WIN7及以上系统

评分

参与人数 1技术 +1 收起 理由
308131375 + 1 完美解决问题

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 07:21 , Processed in 0.023026 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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