如何使用变量在批处理文件中设置 FI 的值[重复]
Posted
技术标签:
【中文标题】如何使用变量在批处理文件中设置 FI 的值[重复]【英文标题】:How do I set the value for FI in a batch file using a variable [duplicate] 【发布时间】:2021-02-07 19:10:52 【问题描述】:所以,我试图通过创建一个批处理文件来让我的生活更轻松一些,当我使用特殊命令时该批处理文件将终止特定进程。事情是这样的:
SET NAME = %1
IF NOT DEFINED NAME SET NAME = "firefox*"
SET fullcommandarg = "IMAGENAME eq " and NAME
TASKKILL /FI %fullcommandarg% /F
但我收到一个错误,即 FI 需要参数。我不是想了解批处理文件是如何工作的,但我想知道我在这里做错了什么以及可能的解决方案是什么。由于 Firefox 通常是我使用此命令关闭的应用程序,因此我将其设置为默认值。我怎样才能让它工作? 提前致谢。 P.S:如果您真的想提供帮助,请仅在此处发表评论。如果您要告诉我去读一本书或类似的东西,我会重复一遍,我并不想学习更多关于批处理文件的知识,而不是我所需要的。对于那些真正想提供帮助的人,欢迎参考链接,以防解释太长或者您没有时间输入它或其他什么。
【问题讨论】:
Batch 对SET
语句中的空格敏感。 SET FLAG = N
将名为“FLAGSpace
”的变量设置为值“Space
N”。使用语法set "name=string"
以获得最佳结果 - 不要在分配的值中包含引号 - 它会导致问题。连接字符串的语法是 set "longstring=fixed text %shortstring%"
,而不是 and
。由于您正在使用 %fullcommandarg%
执行 taskkill
但设置了 fullcommandargspace
,因此批量替换 NOTHING 为 %fullcommandarg%
@Magoo - 谢谢。我按照您的指示编辑了我的文件,现在它可以工作了。 :D
【参考方案1】:
对于set a variable value inside an if-else
,您需要将setlocal EnableDelayedExpansion
与!NAME!
一起使用。
据我所知,and
也不是链接字符串的命令。
请记住,SET
将变量值设置为字符串(不需要"..."
)。
setlocal EnableDelayedExpansion
SETLOCAL EnableExtensions
SET NAME=%1
IF NOT DEFINED NAME SET NAME=firefox*
SET fullcommandarg=IMAGENAME eq !NAME!
TASKKILL /FI !fullcommandarg! /F
【讨论】:
延迟扩展解释令人困惑,因为您在这里不需要它。 @DadiBit Delayed expansion 这里不需要 Stephan 已经写过的。也不建议运行 SETLOCAL 两次来定义所需的执行环境。在这种情况下,建议使用setlocal EnableExtensions DisableDelayedExpansion
(一个命令行)来定义Windows 默认的执行环境。请阅读this answer 了解有关命令 SETLOCAL 和 ENDLOCAL 的详细信息,以了解在后台每次执行 SETLOCAL 时会发生什么。以上是关于如何使用变量在批处理文件中设置 FI 的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 macOS 中设置 JAVA_HOME 环境变量 [重复]