如果我们传递多个值,如何复制多个值

How to copy multiple value if we passed multiple value

我正在使用下面的代码复制文件夹,但是当我输入 a1,a2 时它不起作用,只能在单一平台上工作。

$publish="C:\Publish"
$finalpublish="C:\Publish\Final_Publish"
Write-host "a1,a2,a3" 
$platformvalue= Read-Host "Please enter Platform name which have dll in release, Please find above list for your reference"
IF($platformvalue -eq 'a1'){
Copy-Item $publish\a1 -Destination $finalpublish\a1 -Recurse
}
IF($platformvalue -eq 'a2'){
Copy-Item $publish\a2 -Destination $finalpublish\a2 -Recurse
}
IF($platformvalue -eq 'a3'){
Copy-Item $publish\a3 -Destination $finalpublish\a3 -Recurse
}

Read-Host 只允许输入简单的字符串,但您似乎希望它的行为类似于具有多个值的数组。因此,您要么需要使用 参数 正确设置脚本,以便将输入传递给 (this is a simple introduction),要么首先解析 Read-Host 字符串,以便您可以处理每个项目。

例如,如果您在每个项目之间放置逗号,则可以将其拆分为一个数组。您可以在控制台中快速查看它的工作原理。

> $platformvalue = (Read-host "prompt") -split ','
prompt: a1,a2,a3

# the input is now separate items if you output them in a Foreach-Item loop
> Foreach ($i in $platformvalue) { write-host "Output $i" }
Output a1
Output a2
Output a3

一旦 $platformvalue 被拆分成一个或多个项目,您需要用 Foreach-Item 处理它们(如果只有一个项目,这不是严格意义上的,但您需要更多代码来检查- 浪费时间)。

Foreach ($i in $platformvalue) {
    IF($i -eq 'a1'){
       Copy-Item $publish\a1 -Destination $finalpublish\a1 -Recurse
    }
  ...
}

顺便说一下,如果您的变量将包含准确构建每条路径所需的整个字符串,则您不需要 If 语句。

例如,如果 $platformvalue 是一个类似于 @("a1","a2") 的数组(来自拆分 Read-Host 或其他),并且这些字符串足以构建您的路径,您只需要一个复制语句:

Foreach ($i in ("a1","a2")) {
    Copy-Item $publish$i -Destination $finalpublish$i

    # 1st loop: $i = 'a1'
    # Result: $publish\a1 -Destination $finalpublish\a1
    
    # 2nd loop: $i = 'a2'
    # Result: $publish\a2 -Destination $finalpublish\a2
}

如果您要对路径进行其他修改,则只需要所有这些 If。如果是这种情况,我强烈建议使用 Switch 语句而不是 If 链。