如何在Windows命令提示符中将文件内容作为命令参数传递?

8

我想要做类似于bash的东西

kill -9 `cat pid.txt`

在Windows中。我尝试过
set /p mypid= < pid.txt && taskkill /f /pid %mypid%

但它不起作用,看起来像是在执行“taskkill”命令后才分配了“%mypid%”值。如何解决?(我将从NSIS安装脚本中调用此命令,因此不想为其创建单独的“.bat”文件)。

1
Windows平台缺少Linux/Unix世界常见的许多机制。你可以尝试对进程进行分段处理:1)读取pid文件,2)将其传递给“taskkill”。 - Seki
2个回答

9

我不确定pid.txt文件的内容是什么,但是假设它只包含PID本身,您可以按照以下步骤进行操作:

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

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

如果pid.txt中的内容不是这样,请编辑您的问题以更清晰地表达。


谢谢。 pid.txt 仅仅是进程 ID。但当我尝试运行它时,Windows 只是为我执行了记事本和 pid.txt - user1569115
太棒了!我不知道Windows批处理文件可以做到那样的事情!谢谢。 - codeplumber
它对我只产生了一个错误:%%x是意外的 - Jérémy
1
如果您是直接从命令行运行它,但不是在批处理文件中,请使用“%x”而不是“%%x”。 - Mark

1
以下脚本可以按照您的期望运行,而不依赖于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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接