You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求分享从BAT/CMD调用本地PowerShell会话并交互的语法

批处理调用PowerShell并实现双向信息交互

基础本地调用语法

在批处理中直接调用PowerShell执行原生cmdlet或脚本,核心语法如下:

  • 执行单行PowerShell命令:
powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem C:\Temp"

参数说明:

  • -NoProfile:不加载PowerShell配置文件,避免额外配置干扰

  • -ExecutionPolicy Bypass:临时绕过执行策略(仅本次会话生效,符合本地执行的安全限制)

  • -Command:指定要执行的PowerShell命令内容

  • 调用本地PowerShell脚本文件:

powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\YourScript.ps1"

批处理与PowerShell的信息互传

1. 批处理向PowerShell传递数据

可以通过命令行参数或环境变量传递:

  • 命令行直接传参:
set "TARGET_PATH=C:\Windows\System32"
powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-Item '%TARGET_PATH%'"
  • 环境变量传递:
set "SERVICE_NAME=wuauserv"
powershell -NoProfile -ExecutionPolicy Bypass -Command "(Get-Service $env:SERVICE_NAME).Status"

2. 捕获PowerShell输出到批处理变量

使用for /f命令捕获PowerShell的标准输出,赋值给批处理变量:

@echo off
setlocal enabledelayedexpansion

:: 执行PS命令并捕获结果
for /f "delims=" %%i in ('powershell -NoProfile -ExecutionPolicy Bypass -Command "(Get-Process | Where-Object {$_.Name -eq 'notepad'}).Id"') do (
    set "NOTEPAD_PID=%%i"
)

:: 根据捕获的结果执行后续逻辑
if defined NOTEPAD_PID (
    echo 记事本进程ID:!NOTEPAD_PID!
) else (
    echo 未找到记事本进程
)
endlocal

3. 通过状态码实现批处理逻辑分支

在PowerShell中用exit返回自定义状态码,批处理通过%errorlevel%获取并判断:

@echo off
powershell -NoProfile -ExecutionPolicy Bypass -Command "if (Test-Path 'C:\Temp') { exit 0 } else { exit 1 }"

if %errorlevel% equ 0 (
    echo 目录C:\Temp存在
) else (
    echo 目录C:\Temp不存在
)

内容的提问来源于stack exchange,提问作者Nana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:55:17