【问题标题】:Batch script to kill process if string is found in text file如果在文本文件中找到字符串,则批处理脚本终止进程
【发布时间】:2017-02-23 18:17:17
【问题描述】:

我有一个将日志写入acc.txt 文件的进程,当在该.txt 文件中找到某个字符串时,我正在尝试重新启动该进程。找到字符串并与我要查找的内容匹配后,应清除 acc.txt 内容并终止进程。

更新:已修复错误,请参阅下面的解决方案。

【问题讨论】:

  • 这不是一个问题,而是一个任务请求。请提供您尝试过的代码并描述您遇到的问题。请参阅此帮助主题:How to Ask!

标签: batch-file replace kill-process string-search text-search


【解决方案1】:

您可以使用findstrtaskkill 命令,例如:

@echo off
pushd %~dp0

:loop
   find "Error8902" acc.txt >nul 2>&1 && goto :stringFound
   echo String not found
   timeout /nobreak 1 >nul      & :: Interval between scanning
goto :loop


:stringFound
   echo String found, killing process
   taskkill /f /t /im process.exe
   del /F acc.txt
   pause

【讨论】:

  • 似乎我只收到了一条string not found 消息,尽管在 acc.txt 文件中确实存在 Error8902 文本。
  • 我替换为:find "Error8902" acc.txt >nul 2>&1 && goto :stringFound 并且现在似乎可以工作了,问题是acc.txt内容是完整的并且没有得到删除。同时似乎以管理员身份运行批处理脚本返回找不到字符串
  • @Chris,因为以管理员身份运行批处理文件会将工作目录设置为 System32 目录。
  • 您需要删除 /F 选项。 /F 选项用于文件列表。他只需要解析文件acc.txt。
  • 哦,对了。完全忘记了这部分,谢谢。所以使用find "Error8902" acc.txt >nul 2>&1 && goto :stringFound 行将使脚本按预期进行,问题是acc.txt 内容是完整的并且不会被删除。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
相关资源
最近更新 更多