标题: [文本处理] 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 编辑
- @echo off
-
- >"%USERPROFILE%\desktop\收集.txt" (for /f "delims=" %%a in ('dir /a-d/b/s *.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
- )
复制代码
用法: 保存为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
- #&cls&@powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause&exit
-
- Get-ChildItem -Path './' -Include ('ListBoxes.cfg') -Recurse|ForEach-Object {
- Get-Content -Path $_ -Encoding UTF8|ForEach-Object{
- if( $_ -eq '-----split-----') { break;}
- $_ -replace '\D.*' >> $env:USERPROFILE'\desktop\收集.txt'
- }
- }
复制代码
用法:保存为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
- @echo off
-
- >"%USERPROFILE%\desktop\收集.txt" (for /l %%i in (1,1,30) do (
- call :GetContent "%USERPROFILE%\desktop\发帖%%i\save\ListBoxes.cfg"
- ))
- goto:eof
-
- :GetContent
- for /f "useback" %%i in ("%~1") do (
- if "%%~i" == "-----split-----" goto :eof
- echo %%i
- goto:eof
- )
复制代码
试试这个?核心代码来源三楼,改了里面的收集部分
作者: 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |