首页 > 解决方案 > 喜欢在变量中获取 powershell 脚本的输出以在批处理文件中使用

问题描述

我有以下“powershell脚本”

Get-WMIObject -Query "SELECT * from win32_logicaldisk WHERE DriveType = '3'" | Measure-Object -Property Size -Sum | select -ExpandProperty SUm

我想用它来实现它,但我的 var 变量是空的。我认为它与“或”有关,但我是新手,我对脚本的了解不是那么好。有人可以帮我解决这个愚蠢的事情吗?

FOR /F "tokens=* USEBACKQ" %%F IN (`powershell -noprofile {Get-WMIObject -Query "SELECT * from win32_logicaldisk WHERE DriveType = '3'" | Measure-Object -Property Size -Sum | select -ExpandProperty SUm}`) DO (
SET var=%%F

标签: powershellbatch-filevariablessyntax

解决方案


主要问题是 PowerShell 中的许多字符批量执行其他操作,它们会干扰for循环的工作方式。将其与进入for /F循环的额外字符串处理层相结合,需要大量额外的转义。

最终,所有内容的引号和双引号加上转义内部引号似乎可以解决问题。

@echo off
FOR /F "tokens=* USEBACKQ" %%F IN (`powershell -noprofile "Get-WMIObject -Query \""SELECT * from win32_logicaldisk WHERE DriveType = '3'\"" | Measure-Object -Property Size -Sum | select -ExpandProperty Sum"`) DO (
    SET var=%%F
)
echo %var%

推荐阅读