【问题标题】:Reading a value from a file in a windows batch script从 Windows 批处理脚本中的文件读取值
【发布时间】:2008-11-18 09:54:13
【问题描述】:

我正在尝试从文件中读取一个值并在后续命令中使用它。

我有一个名为 AppServer.pid 的文件,其中包含我的应用服务器的进程 ID(只是数字,它不是属性文件或类似的东西)。

应用服务器挂起,所以我想取这个值并将它传递给 kill 命令。所以我的脚本会是这样的

SET VALUE_FROM_FILE=AppServer.pid # or something
taskkill /pid %VALUE_FROM_FILE% /f

在 Windows 脚本中是否有方便的方法来执行此操作?

【问题讨论】:

    标签: windows file scripting batch-file


    【解决方案1】:

    这行得通:

    SET /P VALUE_FROM_FILE= < AppServer.pid
    taskkill /pid %VALUE_FROM_FILE% /f
    

    与 SET 一起使用的 /P 参数允许您使用来自用户的输入(或者在这种情况下,来自文件的输入)设置参数的值

    【讨论】:

    • 谢谢。这可能是更直接的解决方案。
    • 如果你多次启动它,它会取之前的值而不是当前的值。这对我来说是如何工作的。
    • @ses 我在这里有同样的行为。这很烦人,因为它似乎落后于时间。它读取文件以前版本的内容。即使在同一个脚本中调用两次。不能用那个。 PS:第一次调用时,它什么也不读。这绝对不是正确答案。
    【解决方案2】:
    for /f %%G in (appid.txt) do (SET PID=%%G)
    echo %PID%
    taskkill etc here... 
    

    这可能会有所帮助!

    【讨论】:

    • 这与接受的答案存在相同的问题。它读取文件的内容,就像上次调用脚本时一样。没用。
    • 如果没有看到错误消息(如果有),我无法知道出了什么问题。但请尝试以下。 1.尝试在上次运行后在另一个cmd窗口中再次运行它。每次在新窗口中运行。 2. 避免文件中的前导或尾随空行。 3. 使用 setlocal 和 endlocal。
    【解决方案3】:

    如果您知道从命令tasklist 返回的进程名称,那么您可以运行taskkill,并在进程名称上加上过滤器,即/FI IMAGENAME eq %process_name%

    例如,要杀死所有名为 nginx.exe 的进程运行:

        taskkill /F /FI "IMAGENAME eq nginx.exe"
    

    “以英文阅读”:杀死所有匹配过滤器/FI“IMAGENAME equals nginx.exe”的任务(如果需要,通过/F强制执行)。

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2013-04-20
      • 1970-01-01
      相关资源
      最近更新 更多