【问题标题】:Call powershell comands from bat file / cmd comand and keep running to the next line从 bat 文件 / cmd 命令调用 powershell 命令并继续运行到下一行
【发布时间】:2021-08-20 11:54:43
【问题描述】:

我有一个脚本可以在我离开计算机时关闭显示器(我想手动操作,是的)

简单如下:

timeout 5 /nobreak

echo Turning off...

powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)

效果几乎很好,除了我打开(例如移动鼠标)时,cmd 窗口保持打开状态

现在我也想让电脑静音,所以我补充说:

powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x319,-1,0x90000)

但是一旦一条指令被执行,它就不会继续到下一条

不知道我应该做什么或搜索...

【问题讨论】:

  • 您似乎已经转义了双引号,即使它们没有嵌套在另一组双引号中,我认为这是不正确的。此外,由于单引号对 cmd.exe 没有什么特别的意义,(它们只是标准字符),您的插入符号 ^ 可能会成为问题,因为这是 cmd 的特殊字符。 exe,(转义字符).
  • cmd.exe 中运行powershell.exe 命令并不难。以%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -Command "" 开始命令。然后在这两个双引号之间插入您的工作 PowerShell 命令。现在在运行它之前,您需要使用反斜杠转义任何插入的双引号,并使用另一个百分比字符来转义任何百分比字符。因此,如果以下在 PowerShell 中工作,Write-Host "foobar",您的命令在您的批处理文件 …powershell.exe -Command "Write-Host \"foobar\"" 中将如下所示。
  • 现在开始一个可执行文件,在本例中为powershell.exe,但不要等到它完成,即继续运行下一个命令,您将使用start 命令,即Start "" "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "Write-Host \"foobar\"" .

标签: windows powershell cmd volume


【解决方案1】:

由于老板来了,这个“空白我的显示器”自从在TechNet上发布以来就被各种形式的传言了很长时间。但是,它通常不会与第二次调用结合使用,因此可以作为单行运行。

在顺序批处理中组合时,命令需要不间断地启动,因此在这种情况下,我们可以使用 Start "Title" Command 生成两个命令

第一个抱怨是控制台命令在运行时会显示一个控制台窗口,因此在这种情况下,最简单的解决方案是运行脚本任务栏/MINimised 或/Blank

@echo off & echo Turning off Audio ^& Video in... & timeout 5 /nobreak

Start /B "Audio Off" powershell (Add-Type '[DllImport(\"user32.dll\")]public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x319,-1,0x90000)

Start /B "Video Off" powershell (Add-Type '[DllImport(\"user32.dll\")]public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)

如果您想最大化 CMD 以在触发后更快地进行初始掩护,请尝试使用此命令代替第一行。

@echo off & Color 02
if not "%1" equ "1" start /max "Turn off" "%~f0" 1
if not "%1" equ "1" exit
echo(&echo  'Turning off Audio ^& Video in...' & timeout 5 /nobreak

但是从编程的角度来看,可能会被认为是玩脏的。

AND你需要一个额外的Exit之后第二个Start /B

建议您使用快捷方式等开始上面的第一个示例

Start /MAX "Turn Off" TurnOff.cmd 或者随便你怎么称呼它

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 2018-03-14
    • 2012-11-28
    • 2018-08-28
    • 2012-09-21
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多