我想创建自己的自动运行,但仅限于特定文件,对于 .ps1 文件,它无法继续

问题描述 投票:0回答:1

我想自动运行一些脚本,但无法使用内置函数,因为我不使用 explorer.exe 作为 shell。 所以我有了我的主要工具,它作为 shell 运行,然后集成了一个函数来启动我的自动运行脚本。 现在我的问题是,如果有 .ps1 文件,它总是等待它完成并且根本不继续。我希望它隐藏启动并立即继续运行我目录中的其他文件。

我的脚本(.cmd):

:: Loop through each file in the directory and start them
for %%F in (*.exe *.lnk *.cmd *.bat *.ps1) do (
    echo Starting %%F...
    if "%%~xF"==".ps1" (
        start /B cmd /c powershell -Command "Start-Process PowerShell -ArgumentList '-ExecutionPolicy Bypass -File %%F' -WindowStyle Hidden"
    ) else (
        start "" "%%F"
    )
)
windows powershell batch-file
1个回答
0
投票
  • 根据您自己的反馈,您的方法确实有效:它异步启动了(嵌套的)PowerShell 进程。

  • 但是,您的命令可以简化以避免不必要的

    cmd /c
    调用:

    start /b powershell -c Start-Process -WindowStyle Hidden powershell '-ExecutionPolicy Bypass -File %%F'
    
    • 如果

      %%F
      有可能包含 空格(或其他 PowerShell 元字符):

      start /b powershell -c "Start-Process -WindowStyle Hidden powershell '-ExecutionPolicy Bypass -File \"%%F\"'"
      

说明:

  • /b
    告诉
    cmd.exe
    的内置
    start
    命令运行
    powershell
    ,这是一个 console 应用程序,无需创建新的控制台窗口

    • 这实际上使它在 caller's 控制台窗口中运行,虽然没有
      /WAIT
      ,但这有可能干扰调用者,这不是一个问题,因为这
      powershell
      的唯一目的实例是在隐藏窗口中启动另一个 PowerShell实例(见下文)。
  • -c
    (
    -Command
    ) 允许将任意一段 PowerShell 代码传递到
    powershell
    CLI。

  • PowerShell 的

    Start-Process
    cmdlet 允许启动任意进程;默认:

    • 它是异步(您可以使用
      -Wait
      更改它)
    • 新窗口中,您可以通过
      -WindowStyle
      参数控制其样式/可见性(类似于
      cmd.exe
      /B
      选项,您可以使用
      -NoNewWindow
      )。
© www.soinside.com 2019 - 2024. All rights reserved.