Пакетный файл для анализа текстового файла для строки, которая будет выполнять инструкцию SQL при возвращении истины - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над настройкой командного файла для анализа файла журнала на наличие определенной строки слов: «более одного соответствующего элемента».Эта строка слов находится в предложении в файле журнала при возникновении проблемы на моем сервере.Я знаю Java, но на самом деле я не знаю DOS, так что я вроде как его использую.В любом случае, когда пакетный сценарий анализирует файл и находит эту строку слов, я думаю, что могу использовать инструкцию IF для выполнения инструкции SQL в SQL SERVER через командную строку, чтобы исправить проблему.

Этокак говорится, я сталкиваюсь с проблемой.При тестировании я столкнулся с ошибкой: in () был неожиданным в это время.Я полагаю, это из-за того, что мой файл не может быть распознан, а анализ еще не начался?У меня есть несколько файлов в этой папке, с тем же именем.Эти файлы имеют даты после имени, которое находится в пути к файлу моего пакетного скрипта, например: 'JobRunnerLogFile.winservice020619.txt' Текущий файл журнала на сегодняшний день имеет точное имя из моего пути к файлу ниже.Возможно ли, чтобы пакетный скрипт посмотрел на точное имя или просто с чего начинается файл?Разве он не знает, какой файл открыть?Также мой синтаксис ниже, чтобы разобрать файл для этой строки текста правильно?

@echo off
set %file% = "H:\Program Files (x86)\Test\JobRunnerLogFile.winservice.txt"
for /f "tokens=more than one matching element" %%A in(%file%)                      
do(echo%%A)
pause
cmd /k

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Ваша задача не очень ясна, надеюсь, это немного приблизит вас к вашему намерению.

@Echo Off
Set "SD=H:\Program Files (x86)\Test"
Set "SF=JobRunnerLogFile.winservice*.txt"
Set "SS=more than one matching element"
If Not Exist "%SD%\%SF%" Exit /B
For /F "Delims=" %%A In ('FindStr /IMC:"%SS%" "%SD%\%SF%"'
) Do Echo String match found in "%%~nxA"
Pause

Очевидно, вы бы заменили команду Echo на SQLкоманда / оператор.

Если вам нужно полное имя файла, измените "%%~nxA" на "%%A"

0 голосов
/ 11 февраля 2019

Если я правильно понимаю, попробуйте это.

При этом выполняется поиск нескольких уникальных строк в любом файле журнала .txt, расположенном на рабочем столе.Если какой-либо файл найден, он запускает файл SQLstatementSQL.bat, который должен содержать вашу инструкцию SQL в SQL SERVER через командную строку, чтобы исправить проблему.

Если файлы журнала не содержат этих строк, он будет отображать LOGFILEISOKAY.

Сохраните это как файл .bat и измените пути так, чтобы они совпадали с вашими.Надеюсь, это поможет.

Параметр / S на findstr ищет все файлы в каталоге.Если вы знаете конкретное имя файла, вы можете изменить этот bat-файл, чтобы отразить это.Что-то вроде:

findstr "more than one matching element" "C:\Users\Lenovo\Desktop\IKNOWTHEFILENAME.txt"

Вот файл .bat.

:: each word you are looking for seperated by a whitespace.

@echo off   
findstr /S "more than one matching element" "C:\Users\Lenovo\Desktop\*.txt"
if %errorlevel% equ 1 goto notfound
call "C:\Users\Lenovo\Desktop\SQLstatementSQL.bat"
goto done
:notfound
echo LOGFILEISOKAY
goto done
:done
0 голосов
/ 08 февраля 2019

Я, возможно, не понял ваш вопрос на 100%, поскольку он немного неясен, но если бы я понял, вы ищете что-то вроде этого:

@echo off
set "file=H:\Program Files (x86)\Test\JobRunnerLogFile.winservice.txt"
for /f "delims=" %%a in('type %file% ^| findstr /i "more than one matching element"') do (
   echo some cmd here
   echo %%a
 )
 pause

Мы type просматриваем файл иищите строку, используя findstr.

. Вы можете получить дополнительную помощь по командам, перейдя на страницу справки по cmd, выполнив:

for /?
set /?
findstr /?
...