Powershell 中断的if/else语句
此脚本当前使用Powershell 中断的if/else语句,powershell,Powershell,此脚本当前使用if…else确保用户输入正确的命名约定。如果脚本输入了正确的约定,那么脚本将正常执行。如果他们不这样做,它将提示他们使用命名约定,但一旦输入,程序将关闭而不继续 我想对其进行更改,以便提示他们输入正确的命名约定,直到输入正确为止,然后继续向他们询问别名(别名不需要约定) 我尝试了do…while/until,但不管输入什么,结果都是一个连续的循环。谁能告诉我怎么解决这个问题吗 $name = Read-Host 'What is the SX20 name?' if ($name
if…else
确保用户输入正确的命名约定。如果脚本输入了正确的约定,那么脚本将正常执行。如果他们不这样做,它将提示他们使用命名约定,但一旦输入,程序将关闭而不继续
我想对其进行更改,以便提示他们输入正确的命名约定,直到输入正确为止,然后继续向他们询问别名(别名不需要约定)
我尝试了do…while/until
,但不管输入什么,结果都是一个连续的循环。谁能告诉我怎么解决这个问题吗
$name = Read-Host 'What is the SX20 name?'
if ($name -notlike "SX20VTC-[a-z , 0-9]*") {
Read-Host 'Please begin naming conventions with "SX20VTC-".'
} else {
$description = Read-Host 'What is the SX20 alias?'
$content = (Get-Content C:\Users\SX20_Backup.txt) -replace 'NGMNVC-[a-z , 0-9]*', $name -replace 'SetDescriptionX', $description
$filename = "$env:USERPROFILE\Desktop\$name.txt"
[IO.File]::WriteAllLines($filename, $content)
}
你误用了
if/else
。否则就意味着如果没有。因此,如果用户输入的名称不符合命名约定,则永远不会执行else
块
无论发生什么情况,您都希望执行该部分:
$name = Read-Host 'What is the SX20 name?'
if ($name -notlike "SX20VTC-[a-z , 0-9]*") {
$name = Read-Host 'Please begin naming conventions with "SX20VTC-".'
}
$description = Read-Host 'What is the SX20 alias?'
$content = (Get-Content C:\Users\SX20_Backup.txt) -replace 'NGMNVC-[a-z , 0-9]*', $name -replace 'SetDescriptionX', $description
$filename = "$env:USERPROFILE\Desktop\$name.txt"
[IO.File]::WriteAllLines($filename, $content)
使用
do{}until()
循环,您可以不断请求$name
值,直到他们找到正确的值:
do {
$name = Read-Host 'Please enter SX20 name, must start with "SX20VTC-".'
} until ($name -like "SX20VTC-[a-z , 0-9]*")
你误用了
if/else
。否则就意味着如果没有。因此,如果用户输入的名称不符合命名约定,则永远不会执行else
块
无论发生什么情况,您都希望执行该部分:
$name = Read-Host 'What is the SX20 name?'
if ($name -notlike "SX20VTC-[a-z , 0-9]*") {
$name = Read-Host 'Please begin naming conventions with "SX20VTC-".'
}
$description = Read-Host 'What is the SX20 alias?'
$content = (Get-Content C:\Users\SX20_Backup.txt) -replace 'NGMNVC-[a-z , 0-9]*', $name -replace 'SetDescriptionX', $description
$filename = "$env:USERPROFILE\Desktop\$name.txt"
[IO.File]::WriteAllLines($filename, $content)
使用
do{}until()
循环,您可以不断请求$name
值,直到他们找到正确的值:
do {
$name = Read-Host 'Please enter SX20 name, must start with "SX20VTC-".'
} until ($name -like "SX20VTC-[a-z , 0-9]*")
向我们展示
do…while/until
attempt我想知道这个问题何时会出现。我今天看过几次这段代码,但这部分没有意义。我一直在想这些表达式到底应该匹配什么。您确实意识到,-notlike
进行通配符匹配,而-replace
进行正则表达式匹配吗?在这两种情况下,[a-z,0-9]*
意味着不同的东西?@AnsgarWiechers“SX20VTC-[a-z,0-9]*”
是一个非常好的通配符表达式,相当于^SX20VTC-[a-z,0-9]
与regex
/-match
@MathiasR.Jessen我没有说它无效。然而,它们并不等同。通配符表达式[A-z,0-9]*
匹配一个字母、逗号、空格或数字,后跟任意数量的字符。正则表达式[A-z,0-9]*
匹配任意数量的字母、逗号、空格或数字。至少一个字符与零个或多个字符。另外,我怀疑OP是否真的打算匹配空格或逗号。请向我们展示do…while/until
attempt我想知道这个问题何时会出现。我今天看过几次这段代码,但这部分没有意义。我一直在想这些表达式到底应该匹配什么。您确实意识到,-notlike
进行通配符匹配,而-replace
进行正则表达式匹配吗?在这两种情况下,[a-z,0-9]*
意味着不同的东西?@AnsgarWiechers“SX20VTC-[a-z,0-9]*”
是一个非常好的通配符表达式,相当于^SX20VTC-[a-z,0-9]
与regex
/-match
@MathiasR.Jessen我没有说它无效。然而,它们并不等同。通配符表达式[A-z,0-9]*
匹配一个字母、逗号、空格或数字,后跟任意数量的字符。正则表达式[A-z,0-9]*
匹配任意数量的字母、逗号、空格或数字。至少一个字符与零个或多个字符。此外,我怀疑OP是否真的打算匹配空格或逗号。nelse?就是askinjg,;(谢谢你,马西亚斯。我曾在某个地方读到,do..直到
没有太多使用,do..虽然
基本上可以完成同样的事情,所以我尝试使用$name=read Host'SX20名称是什么?{(read Host'请用“SX20VTC-”)开始命名约定。)而($name-不像“SX20VTC-[a-z,0-9*]“
,这让我陷入了一个循环,直到我关闭了程序。@Blake说得很清楚,do{}while($a-notlike$b)
在功能上与do{}until($a-like$b)
是一样的,但对于您的用例,我个人感觉到do{}until()
清楚地反映了你想要做的事情,即更好的自我记录Nelse?正如Kinjg;(谢谢你,Mathias。我在某个地方读到了做的事..直到
没有太多使用,而做的事..虽然
基本上可以完成同样的事情,所以我试着用$name=read Host'SX20的名字是什么?'do{(阅读主机“请用“SX20VTC-”)开始命名约定。)而($name-notlike“SX20VTC-[a-z,0-9*])
,这让我陷入了一个循环,直到我关闭了程序。@Blake说得很清楚,do{}而($a-notlike$b)
在功能上与do{}直到($a-like$b)是一样的)
,但对于您的用例,我个人认为do{}until()
清楚地反映了您正在尝试做的事情,即更好的自我记录