我已经从之前的问题得到了一些帮助。 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
答案 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%"