【问题标题】:.Bat File does not work with double click, only by the CMD (Set Variable inside IF).Bat 文件不能通过双击工作,只能通过 CMD(在 IF 内设置变量)
【发布时间】:2022-01-24 02:53:12
【问题描述】:

目的:我想创建一个 .bat 文件来在我垂直翻转显示器时旋转我的屏幕,因为我没有找到任何方法来访问显示器的当前状态以使用,我正在尝试使用变量如:每次我启动计算机时,变量 isTurned=1(这意味着显示器旋转),我希望这个 .bat 文件根据这个值改变显示器的旋转。如果显示器是垂直的,旋转到水平,如果是水平的,旋转到垂直。

我正在处理一个批处理文件,这个 %isTurned% 是一个以 1 开头的环境变量。 问题是,当我双击 .bat 文件时,第一个 IF 内的变量不会变为 0。但是,如果我使用 CMD 执行 .bat 文件,它就可以工作。对此有任何想法吗? 打开monitor.bat:

IF %isTurned% == 1 (
SET isTurned=0
 C:\Users\user\multimonitortool-x64\MultiMonitorTool.exe /SetOrientation 5 0
echo %isTurned%
)ELSE (
SET isTurned=1
 C:\Users\user\multimonitortool-x64\MultiMonitorTool.exe /SetOrientation 5 90
echo %isTurned%
)
pause

【问题讨论】:

  • 如果我正确阅读了您的问题,您已经拥有一个现有的 CMD 环境,其中 isTurned 为 1,并且您希望双击该脚本将值同时变为 0环境。那是对的吗?如果是这样,它不会起作用,因为每次通过双击运行脚本时,都会启动一个单独的命令提示符实例,因此 isturned 在新的实例中设置为 0,但旧值仍然存在在上一个。
  • 此外,如果未定义 %isturned%,则当前发布的此代码只会返回语法错误。用双引号将您的匹配条件括起来。 IF "%isTurned%" == "1" (
  • @SomethingDark 我创建了一个名为 isTurned 的环境变量,我想动态更改它。我将编辑帖子以更好地理解
  • 只有setx 命令可以永久更改系统变量。有一个警告。它仅适用于新实例。
  • 您的echo 命令由于缺少delayed variable expansion 而返回错误/以前的值;放置set isTurned 来指示真正的变量值...

标签: windows batch-file environment-variables


【解决方案1】:

要永久 set 一个环境变量,您需要使用 setx,但正如 cmets 中 @Squashman 所述,需要注意的是,它只会在您重新启动 cmd 控制台时显示更改(打开一个新的)。如果需要在当前cmd 提示符的环境中使用新变量,您可以同时使用setx(永久设置变量)和set 在当前环境中设置它来破解它。此外,为了不必使用delayedexpansioncall,我们删除了在代码块内使用变量的选项,您只需要在if/else 语句之外使用echo %isTurned%

@echo off
if "%isTurned%" equ "1" (
    set "isTurned=0"
    setx isTurned 0 
    start "" "C:\Users\user\multimonitortool-x64\MultiMonitorTool.exe" /SetOrientation 5 0
  ) else (
    set "isTurned=1"
    setx isTurned 1
    start "" "C:\Users\user\multimonitortool-x64\MultiMonitorTool.exe" /SetOrientation 5 90
)
echo %isTurned%
pause

注意。

我不知道MultiMonitorTool.exe,所以我使用了start的正确方式。

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多