【问题标题】:Batch file to parse text file for string that will execute SQL statement on returning true批处理文件来解析字符串的文本文件,该字符串将在返回 true 时执行 SQL 语句
【发布时间】:2019-07-02 06:28:53
【问题描述】:

我正在设置一个批处理文件来解析日志文件中的某个字符串:“多个匹配元素”。当我的服务器上出现问题时,这串单词在日志文件中的一个句子中。我知道java,但我并不真正了解DOS,所以我有点想知道它。无论如何,如果批处理脚本解析文件并找到该字符串,我想我可以使用 IF 语句通过命令提示符在 SQL SERVER 中执行 SQL 语句来解决问题。

话虽如此,我遇到了问题。测试时遇到错误:此时 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

【问题讨论】:

  • 喜欢这个? "H:\Program Files (x86)\Test\JobRunnerLogFile.winservice.txt" 还有,set %file% 是否需要设置 file = ?
  • 如果您已经在使用 SQL Server 和 Windows,最好看看 Powershell 选项吗?
  • 我想它可以,我只知道我们服务器上的许多计划任务现在都运行 .bat 文件,所以我只是想我会这样做。另外,我在这里和那里编辑了一些 .bat 文件,所以我猜感觉有点熟悉。
  • 我几乎只是放弃了另一种选择。我会选择您系统中使用的内容以及您喜欢的内容。在大多数情况下,Powershell 基本上是大量类固醇的批处理,但这对于您在这里尝试做的事情可能有点多。 :-)(和 TBH,我可能写了比 PS 更多的批处理代码来做不复杂的事情)
  • 几乎唯一正确的语法是@echo offpause。您的其余代码看起来像您没有阅读您尝试使用的命令的帮助文件。您可以通过打开 cmd 提示符并键入命令名称后跟正斜杠和问号来阅读命令的帮助。 set /?for /?TOKENS 选项绝对不会像您认为的那样做。

标签: sql-server powershell parsing batch-file scripting


【解决方案1】:

我可能没有 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 /?

【讨论】:

    【解决方案2】:

    你的任务不是很清楚,希望这能让你更接近你的意图。

    @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
    

    你显然会用你的SQL 命令/语句替换Echo 命令。

    如果您需要完整的文件名,请将 "%%~nxA" 更改为 "%%A"

    【讨论】:

      【解决方案3】:

      如果我理解正确的话,试试这个。

      这会在您桌面上的任何 .txt 日志文件中搜索多个唯一字符串。如果找到任何内容,它会触发一个 SQLstatementSQL.bat 文件,该文件应包含您在 SQL SERVER 中的 SQL 语句,通过命令提示符解决问题。

      如果日志文件不包含这些字符串,它将回显 LOGFILEISOKAY。

      将其保存为 .bat 文件并更改路径以匹配您的路径。希望对您有所帮助。

      findstr 上的 /S 开关搜索目录中的所有文件。如果您知道文件的具体名称,您可以更改此 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-24
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2012-10-22
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多