У меня есть файл журнал Source.txt
с следующим содержанием-структурой:Повышайте скорость пакетной обработки
Handle v3.51
Copyright (C) 1997-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
------------------------------------------------------------------------------
DataSource.exe pid: 5860 USER\DEVELOPMENT
5EC: File (R--) G:\apps\OracleClient\product\11.1.0\client_2\RDBMS\mesg\ocius.msb
600: File (R--) G:\apps\OracleClient\product\11.1.0\client_2\RDBMS\mesg\ocius.msb
614: File (R--) G:\apps\OracleClient\product\11.1.0\client_2\RDBMS\mesg\ocius.msb
628: File (R--) G:\apps\OracleClient\product\11.1.0\client_2\RDBMS\mesg\ocius.msb
834: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP1_RulesLogFiles\1-28-2014_Timer.log
838: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP1_RulesLogFiles\1-28-2014_Debug.log
854: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP1_RulesLogFiles\1-28-2014_Timer.log
858: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP1_RulesLogFiles\1-28-2014_Debug.log
874: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP1_RulesLogFiles\1-28-2014_Timer.log
878: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP1_RulesLogFiles\1-28-2014_Debug.log
1058: File (RW-) C:\Windows\winsxs\amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_8a1a02152edb659b
------------------------------------------------------------------------------
DataSource.exe pid: 10568 USER\DEVELOPMENT
1074: File (RW-) C:\Windows\winsxs\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_88e046c92fae6f57
1078: File (RW-) C:\Windows\winsxs\amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_8a1a02152edb659b
8F4: File (RW-) C:\Windows\winsxs\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_88e046c92fae6f57
908: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP2_RulesLogFiles\1-28-2014_Timer.log
90C: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP2_RulesLogFiles\1-28-2014_Debug.log
928: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP2_RulesLogFiles\1-28-2014_Timer.log
92C: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP2_RulesLogFiles\1-28-2014_Debug.log
948: File (RW-) G:\apps\Oracle\Middleware\user_projects\epmsystem8\products\FinancialManagement\Server Working Folder\APP2_RulesLogFiles\1-28-2014_Timer.log
1064: File (RW-) C:\Windows\winsxs\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_88e046c92fae6f57
1068: File (RW-) C:\Windows\winsxs\amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_8a1a02152edb659b
| |
| |
| |
and so on......
Я хотел достичь следующего:
Искать 1 вхождение «DataSource .exe ', а затем выполните поиск для 1-го вхождения любого из слов среди
(APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9)
и предположим, что найденное слово APP1 отправит следующий файл в файл' Output.txt ':DataSource.exe pid: 5860 USER\DEVELOPMENT APP1
Тогда поиск 2 вхождения «DataSource.exe», а затем поиск снова для 1-го возникновения какого-либо одного слова среди
(APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9)
[Мы можем отбросить слово, которое уже нашло] и давайте предположим app2 слово найдено, то добавьте следующий вывод в тот же файл 'output.txt':DataSource.exe pid: 10568 USER\DEVELOPMENT APP2
и так далее ..
Я нахожусь используя ниже рабочего сценария:
@ECHO OFF
setlocal enabledelayedexpansion
SET "keystring1="
(
FOR /f "delims=" %%a IN (
Source.txt
) DO (
ECHO %%a|FIND "DataSource.exe" >NUL
IF NOT ERRORLEVEL 1 SET keystring1=%%a
FOR %%b IN (APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9) DO (
ECHO %%a|FIND "%%b" >NUL
IF NOT ERRORLEVEL 1 IF DEFINED keystring1 CALL ECHO(%%keystring1%% %%b&SET "keystring1="
)))>Output.txt
GOTO :EOF
Проблема:
Проблема я испытываю здесь для Source.txt file of size 312 KB
, Этот сценарий принимает 4 minutes to produce Output.txt
даже только для тех 9 АРР, который, кажется, довольно большой время.
Я хочу уменьшить это время так или иначе, без использования дополнительного пакетного файла. любой обходной путь пожалуйста?
* Точные имена приложений отличаются от APP1, APP2 ... и т. Д.
Вместо поиска процесса, а затем определить, какие файлы есть его открытым, перечислить файлы ('dir') и для каждого из них определить процесс, который он заблокирован (' ручка File') –