Board logo

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

作者: 308131375    时间: 2020-9-29 02:20     标题: BAT批量提取cfg指定内容上方首列数字合并生成新的txt

需求:将多个文件夹路径发帖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
作者: 308131375    时间: 2020-9-29 02:26

在线等大神解答,不知能否看明白,
就是我想批量提取
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
作者: yhcfsr    时间: 2020-9-29 16:51

本帖最后由 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,放在桌面执行
作者: 308131375    时间: 2020-9-29 18:50

回复 3# yhcfsr


    您好,我试了,这个采集的并非ListBoxes.cfg这个文件的。
好像采集的是文件夹第一个txt文本的
作者: 308131375    时间: 2020-9-29 18:52

回复 3# yhcfsr


    是不是上述命令中,哪些地方是填写文件夹的呢。
作者: 308131375    时间: 2020-9-29 19:06

@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

其他的没一起提取
作者: 308131375    时间: 2020-9-29 19:06

回复 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

其他的没一起提取
作者: 308131375    时间: 2020-9-29 19:17

回复 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这个文件手动输入数字保存,发生改变后才会被提取,否则不提取。 不知道是什么原因
作者: Batcher    时间: 2020-9-29 21:19

回复 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 文件打包压缩传上来我试试。
作者: 308131375    时间: 2020-9-30 01:15

回复 9# Batcher


    您好,因为附件上传限制我无法上传,
我把文件放到http://suo.im/5sU6oh这个链接下载了。
您查看下。
作者: Batcher    时间: 2020-9-30 09:23

回复 10# 308131375


    我打不开这个链接,你传到百度网盘试试?不用打包太多文件,有两三个就够了
作者: 308131375    时间: 2020-9-30 11:05

回复 11# Batcher
作者: Batcher    时间: 2020-9-30 11:23

回复 12# 308131375


    你这个ListBoxes.cfg是UTF-8编码,请试试9楼的方法改成ANSI编码。
作者: 308131375    时间: 2020-9-30 14:09

回复 13# Batcher


    这个是程序自动生成的。即使更改后,程序不久就又会变回原样。
作者: yhcfsr    时间: 2020-9-30 16:49

  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及以上系统
作者: 308131375    时间: 2020-9-30 18:12

本帖最后由 308131375 于 2020-9-30 18:30 编辑

回复 15# yhcfsr


    您好,我刚试了下,是可以收集到了。
但是发现只能收集到第一个sav文件夹的这个文件,后续还有30多个同样的文件夹内ListBoxes.cfg的数据没有收集到。
作者: yhcfsr    时间: 2020-9-30 21:37

回复 16# 308131375


    把脚本放在所有文件夹的父目录执行,能明白吗?如果不明白,可以百度.
作者: 308131375    时间: 2020-10-1 02:54

回复 17# yhcfsr


    恩,到父目录就可以了。完美解决了。
作者: wujunkai    时间: 2020-10-1 07:52

  1. @echo off
  2. >"%USERPROFILE%\desktop\收集.txt" (for /l  %%i in (1,1,30) do (
  3. call :GetContent "%USERPROFILE%\desktop\发帖%%i\save\ListBoxes.cfg"
  4. ))
  5. goto:eof
  6. :GetContent
  7. for /f "useback" %%i in ("%~1") do (
  8. if "%%~i" == "-----split-----" goto :eof
  9. echo %%i
  10. goto:eof
  11. )
复制代码
试试这个?核心代码来源三楼,改了里面的收集部分
作者: 308131375    时间: 2020-10-1 15:23

回复 19# wujunkai


    这个也是依次要放入父目录吗?
还是C盘就可以。
作者: 308131375    时间: 2020-10-1 15:29

回复 19# wujunkai


    您这个点了收集,收集到的是空的。
作者: 308131375    时间: 2020-10-1 15:31

回复 19# wujunkai


    15楼的可以收集到。好像就是格式问题。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2