Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 中断的if/else语句_Powershell - Fatal编程技术网

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()
清楚地反映了您正在尝试做的事情,即更好的自我记录