用于列出txt和mp3文件的批处理文件 - 使用列表从文本文件中提取相同的行

时间:2014-02-13 12:12:07

标签: batch-file

我已经从之前的问题得到了一些帮助。 Batch script to extract same line from each log file 但这个问题是下一个级别的问题。我想要做的是创建一个文件夹中的所有文本文件和mp3文件的列表。这些文件是成对的,具有匹配的名称1.txt,1.mp3,2.txt,2.mp3。计算列表中的文件数。从文本文件中提取相同的行并再次保存文件。修改其中一行文本并再次保存。移动文本文件和mp3文件 我可以创建列表 我可以统计清单并存储计数 我可以移动文件。
我可以将* .txt文本文件修改为只有一行(例如第30行)但我不能保留多行,我也无法从列表中读取对列表中的所有文本文件执行此操作。
我不能修改这条线 我想要15号线,17号线和30号线。 第15行是文件类型= X(其中X是数字)
第17行是Location = Y(其中Y是数字)
第30行是作业备注=单词XXXXXX日期时间YYYYYY(其中XXXXXX是六位数字,日期是dd / MM / yyyy,时间h:mm AM和YYYYYY是六位数字)
第30行是Line想要修改如下

Name=word word  
File number=XXXXXX  
Date=dd/MM/yyyy  

所以最终的文本文件看起来像这样

File Type=X (from line 15)
Location=Y (from line 17)
Name=word word (from line 30)
File number=XXXXXX  (from line 30)
Date=dd/MM/yyyy  (from line 30)

这是我的代码

@echo off
setlocal EnableDelayedExpansion
set src_folder=C:\Users\Acer_AT3400\Desktop\New_Project
set mov_folder=C:\Users\Acer_AT3400\Desktop\New_Project\Move
set file_list=C:\Users\Acer_AT3400\Desktop\New_Project\Extractor\FileList.txt
set cnt=0
set cntLogFile=%date:~4%
set cntLogFile=%cntLogFile:~-4%-%cntLogFile:~,2%-%cntLogFile:~3,2%
set mveLogFile=%date:~4%
set mveLogFile=%mveLogFile:~-4%-%mveLogFile:~,2%-%mveLogFile:~3,2%
call :run >FileList.txt
call :cntIt
call :ExtractIt
call :mveIt
exit /b

:run

for %%F in (%src_folder%\*.*) do echo %%~nxF

)
exit /b

:cntIt

for /f "delims=" %%f in (%file_list%) do set /a cnt+=1
echo %date%,%cnt%,%time%>>C:\Users\Acer_AT3400\Desktop\New_Project\Extractor\Transfer_Log\count_%cntLogFile%.txt
)
exit /b

:ExtractIt

for /f "delims=" %%f in (%file_list%) in %%a do (
    for /f "tokens=1,* delims=:" %%b in (
        'findstr /n "^" "%%a" ^| findstr /b "30:"'
    ) do (
        echo(%%c>"%%a"
    )
)
exit /b

:mveIt

if not exist "%mov_folder%" mkdir "%mov_folder%"

for /f "delims=" %%f in (%file_list%) do (
    move "%src_folder%\%%f" "%mov_folder%\"
if %errorlevel% GTR 0 (echo MOVE FAILURE,%src_folder%,%%f,%time%,>>%mov_folder%\move_%mveLogFile%.txt) else (echo MOVE SUCCESSFUL,%src_folder%,%%f,%time%,>>%mov_folder%\move_%mveLogFile%.txt)
)

exit /b

我会非常感谢任何建议 大卫 - 担心他咬的比他能咀嚼的多。

要求的新信息。
我输入了Text用于文本的位置(文本文本用于两个单词等)和Number用于输入数字 文本文件之前。

[CMP DESC]
Text=Number
Text=Text
Text Text=Number
Text Text=
Text Text=
Text=Number
Text Text=Number
Text Text=Text Text
Text Text=d/MM/yyyy h:mm:ss AM
Text Text Text=Number
Text Text=d/MM/yyyy h:mm:ss AM
Text Text Text=Number
Text Text Text=Number
File Type=4
Text Text Text=Text
Location=3
Text Text=Number
Text=Number
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Job Notes=John Smith 123456 dd/MM/yyyy h:mm:ss PM 654321
Text Text=Text
Text=Number.mp3
Text=Number
Text=Number
Text=
Text Text=Number
Text Text=
Text Text=Text
Text Text=Text
Text Text=Text
Text=
Text=

您必须包含这样的一行,以便它有实际的数字来处理。

Job Notes=John Smith 123456 11/22/3333 1:22:33 PM 654321

这是我的before.txt文件。

[CMP DESC]
Text=12345
Text=Text
Text Text=12345
Text Text=
Text Text=
Text=12345
Text Text=12345
Text Text=Text Text
Text Text=d/MM/yyyy h:mm:ss AM
Text Text Text=12345
Text Text=d/MM/yyyy h:mm:ss AM
Text Text Text=12345
Text Text Text=12345
File Type=4
Text Text Text=Text
Location=3
Text Text=12345
Text=12345
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Text Text=
Job Notes=John Smith 123456 11/22/3333 1:22:33 PM 654321
Text Text=Text
Text=12345.mp3
Text=12345
Text=12345

文本文件

之后
Name=John Smith
File Number=123456
Date=dd/MM/yyyy
File Type=4
Location=3

1 个答案:

答案 0 :(得分:0)

以下代码采用before文件并创建后文件。

这使用名为repl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

下载

repl.bat放在与批处理文件相同的文件夹中或放在路径上的文件夹中。

@echo off
set "input=before.txt"
set "output=after.txt"
findstr /r /i /c:"^Job Notes=" "%input%" |repl ".*=(.*) (\d+) (\d+\/\d+\/\d+) \d+:\d+:\d+ .*" "Name=$1\r\nFile Number=$2\r\nDate=$3" x >"%output%"
findstr /r /i /c:"^File Type=" "%input%" >>"%output%"
findstr /r /i /c:"^Location="  "%input%" >>"%output%"
相关问题