如何使用变量在批处理文件中设置 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”的变量设置为值“SpaceN”。使用语法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 了解有关命令 SETLOCALENDLOCAL 的详细信息,以了解在后台每次执行 SETLOCAL 时会发生什么。

以上是关于如何使用变量在批处理文件中设置 FI 的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中设置双精度数据类型变量的精度? [复制]

如何在 macOS 中设置 JAVA_HOME 环境变量 [重复]

无法在 bash 脚本中设置变量 [重复]

如何在配置文件中定义的 PowerShell 脚本中设置环境变量?

如何在postgres中设置日期变量[重复]

如何在PHP中设置和使用PHP_INI_SCAN_DIR环境变量? [重复]