当我尝试从批处理文件运行 PowerShell 命令时出现错误

时间:2021-04-16 19:32:45

标签: powershell batch-file command-prompt

我有一个现有的批处理文件。我需要在 C: 上显示可用空间。我发现的最好方法是使用 PowerShell。

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object FreeSpace
Write-Host ("{0}GB free" -f [math]::truncate($disk.FreeSpace / 1GB))

我可以通过以错误级别的结果退出来修改它。

Powershell:

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Freespace
Exit ("{0}" -f [math]::truncate($disk.freespace / 1GB))

退出PS后:

set FreeSpace=%errorlevel%
echo %FreeSpace%

当我从命令提示符运行它时,它工作得很好。为了使其从批处理文件中工作,我需要转义几个字符。

Powershell $disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID=`'C:`'" ^| Select-Object Freespace ^
           Exit ("{0}" -f [math]::truncate($disk.freespace / 1GB))
set FreeSpace=%errorlevel%
echo %FreeSpace%

但我收到错误:

Select-Object : A positional parameter cannot be found that accepts argument 'Exit'.

就好像 Select-Object 正在解析下一行。知道我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

  • 使用 ; 分号作为 Powershell 命令分隔符;
  • 使用另一种转义引号(双引号被扼杀);
  • 您可以在 Exit 中使用整数。

代码:

@echo OFF
Powershell -nopro $disk = Get-WmiObject Win32_LogicalDisk -Filter """"DeviceID='D:'"""" ^| Select-Object Freespace; ^
           Write-Host (""""{0}GB free"""" -f [math]::round($disk.FreeSpace / 1GB)) -Fore Yellow; ^
           Exit ([math]::truncate($disk.freespace / 1GB))
set FreeSpace=%errorlevel%
echo %FreeSpace%

输出.\SO\67131203.bat

<块引用>
796GB free
796