如果我们传递多个值,如何复制多个值
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
链。
我正在使用下面的代码复制文件夹,但是当我输入 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
链。