带if语句的Powershell foreach循环只计算第一个语句
下面是我的代码片段。基本上,它从1循环到用户输入。每个循环生成一个从1到4(包括1到4)的随机数,然后根据该数字将特定word文档打印到默认打印机 如果我只是在没有所有If/elseif语句的情况下运行代码,只打印$ran的值,那么它工作得很好 但是,一旦我放入if/elseif语句,它只打印文件号1.docx 你知道为什么在我使用if/elseif语句时$ran的值似乎保持为1吗 代码-带if语句的Powershell foreach循环只计算第一个语句,powershell,if-statement,random,foreach,Powershell,If Statement,Random,Foreach,下面是我的代码片段。基本上,它从1循环到用户输入。每个循环生成一个从1到4(包括1到4)的随机数,然后根据该数字将特定word文档打印到默认打印机 如果我只是在没有所有If/elseif语句的情况下运行代码,只打印$ran的值,那么它工作得很好 但是,一旦我放入if/elseif语句,它只打印文件号1.docx 你知道为什么在我使用if/elseif语句时$ran的值似乎保持为1吗 代码- 1..$count | foreach { $ran = random -Minimum 1 -Maxim
1..$count | foreach { $ran = random -Minimum 1 -Maximum 5
if ($ran = 1) {
Start-Process -FilePath "file1" -Verb Print
Wait-Process "WINWORD"
}
Elseif ($ran = 2){
Start-Process -FilePath "file2" -Verb Print
Wait-Process "WINWORD"
}
elseif ($ran = 3){
Start-Process -FilePath "file3" -Verb Print
Wait-Process "WINWORD"
}
elseif ($ran = 4){
Start-Process -FilePath "file4" -Verb Print
Wait-Process "WINWORD"
}
else {
Write-Output "Something went wrong!"
pause
}
}
switch语句比您使用的大量IF语句更漂亮、更易于使用。下面是
开关的语法/
$x = Get-Random -Minimum 1 -Maximum 7
switch ($x)
{
1 {"x was 1"}
{$_ -in 2,3} {"x was 2 or 3"}
4 {"x was 4"}
Default {"x was something else"}
}
您可以非常简单地指定比较,只需匹配变量的值。对于更复杂的逻辑,也可以使用scriptblock。最后,Default
处理其他语句未明确解析的任何内容
下面是如何开始用switch语句重写代码
1..$count | foreach{
$ran=随机-最小1-最大5
交换机($ran){
1{
启动进程-文件路径“file1”-动词打印
等待进程“WINWORD”
}
2{
启动进程-文件路径“file2”-动词打印
等待进程“WINWORD”
}
#在这里完成剩下的部分,=
用于赋值,而不是比较。[grin]使用-eq
代替。另外,看看switch
语句。它非常擅长在一个更整洁的包中进行if/elseif/else
级联。