如何将参数从cmd传递到powershell中的字符串数组参数

How to pass parameters from cmd to a string array parameter in powershell

我有一个 cmd 文件,它调用显示输入的 powershell 脚本。

cmd 的输入是文件名列表,它将文件名列表转发给接受字符串数组的 powershellscript。

试用时,整个文件名列表作为一个参数。

我尝试了 link and 的答案,但没有成功。

下面是我 运行 命令时的输出。

C:\Users\User1>C:\Sample.cmd "C:\file1.txt C:\file2.txt"
Processing file - C:\file1.txt C:\file2.txt

不幸的是,cmd(文件列表)的输入是从调用它的外部程序接收的。

powershell 脚本是这样的:

param
(
    [Parameter(Position = 0, Mandatory = $true)]
    [string[]] $sourceFiles
)

Function Sample_function
{
Param
    (
        [Parameter(Position = 0, Mandatory = $true)]
        [string[]] $sourceFiles
    )
    
    foreach($file in $sourceFiles)
    {
        Write-Host "Processing file - $file"        
        
    }
}

Sample_function $sourceFiles

cmd 是这样的:

@echo off

set PS_File="C:\Sample.ps1"

powershell -FILE "%PS_File%" %*

为了使数组参数与 %* 一起使用,请使用 ValueFromRemainingArguments 设置:

param
(
    [Parameter(Position = 0, Mandatory = $true, ValueFromRemainingArguments = $true)]
    [string[]] $sourceFiles
)

现在 PowerShell 将正确地将所有扩展参数值绑定到 $sourceFiles,即使它们被 space 分隔而不是 ,