【问题标题】:How to pass file content as a command argument in Windows cmd?如何在 Windows cmd 中将文件内容作为命令参数传递?
【发布时间】:2013-06-18 15:51:43
【问题描述】:

我想做一些类似 bash 的事情

kill -9 `cat pid.txt`

在 Windows 中。我试过了

set /p mypid= < pid.txt && taskkill /f /pid %mypid%

但它不起作用,看起来 %mypid% 在执行 taskkill 后被分配。

怎么做? (我打算从 NSIS 安装脚本中调用这个命令,所以我不想为它创建一个单独的 .bat 文件)。

【问题讨论】:

  • Windows 平台缺少 Linux/Unix 世界中常见的几种机制。您可以尝试对进程进行分段:1)读取 pid 文件并 2)将其传递给 taskkill

标签: windows cmd nsis


【解决方案1】:

我不确定 pid.txt 的内容是什么,但假设它只是 PID 本身,你可以这样做:

for /f %%x in (pid.txt) do taskkill /f /pid %%x

如果您是从命令行运行它,而不是作为批处理文件的一部分,请将 %%x 替换为 %x

如果这不是 pid.txt 中的内容,请编辑您的问题以更清楚地说明这一点。

【讨论】:

  • 谢谢。 pid.txt 只是 PID 本身。但是当我尝试运行它时,Windows 只是为我执行了带有pid.txt 的记事本。
  • 优秀!我不知道 Windows 批处理文件可以做到这一点!谢谢。
  • 它只会为我生成一个错误:%%x was unnexpected
  • 如果您是直接从命令行而不是在批处理文件中运行它,请使用%x 而不是%%x
【解决方案2】:

以下脚本正在执行您所期望的操作,而不依赖于 shell 功能:

OutFile "kill.exe"

Var pid
!define filename "pid.txt"

Section

    ClearErrors
    FileOpen $0 "${filename}" r
    IfErrors 0 readok
    DetailPrint "Error to open ${filename}"
    goto done
    readok:
    FileRead $0 $pid
    DetailPrint "pid found=$pid"
    FileClose $0

    ExecWait 'taskkill /F /PID $pid'
    done:

SectionEnd

【讨论】:

    猜你喜欢
    • 2015-04-14
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多