.Bat文件不能通过双击来工作,只能通过CMD(在IF中设置变量)来工作



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

我在一个批处理文件中工作,这个%isTurned%是一个以1开头的环境变量。问题是,当我双击.bat文件时,第一个IF中的变量不会变为0。但是,如果我使用CMD执行.bat文件,它就可以工作了。你知道吗?转向监视器.bat:

IF %isTurned% == 1 (
SET isTurned=0
C:Usersusermultimonitortool-x64MultiMonitorTool.exe /SetOrientation 5 0
echo %isTurned%
)ELSE (
SET isTurned=1
C:Usersusermultimonitortool-x64MultiMonitorTool.exe /SetOrientation 5 90
echo %isTurned%
)
pause

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

@echo off
if "%isTurned%" equ "1" (
set "isTurned=0"
setx isTurned 0 
start "" "C:Usersusermultimonitortool-x64MultiMonitorTool.exe" /SetOrientation 5 0
) else (
set "isTurned=1"
setx isTurned 1
start "" "C:Usersusermultimonitortool-x64MultiMonitorTool.exe" /SetOrientation 5 90
)
echo %isTurned%
pause

注意

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

最新更新