如何在编号菜单中允许多项选择?

时间:2015-07-24 02:44:36

标签: powershell menu automation

这与我之前关于FTP时间戳的问题有关。我正在编写一个脚本来帮助我完成工作,并希望其他人通过简化PC设置来提高工作效率。现在一切都很完美,除了我想让它更加自动化。现在它只允许一次一件事。我希望能够选择多个数字并让它们一个接一个地运行它们。

这需要在Windows 7中运行而无需导入任何额外的模块。

这是我到目前为止所拥有的:

echo ""
$answer = read-host "Select a number"
echo ""

if ($answer -eq 1){uninstall}
if ($answer -eq 2){flashjava}
if ($answer -eq 3){reader}
if ($answer -eq 4){firefox}
if ($answer -eq 5){chrome}
if ($answer -eq 6){office}
if ($answer -eq 7){reader}
if ($answer -eq 8){updates}
if ($answer -eq 9){exit}

else {write-host -ForegroundColor red "Invalid Selection"
    sleep 2
    mainmenu
    }
echo ""

而不是选择选项2(例如),让它去,然后点击选项3,依此类推我想输入“2,3”(没有引号)并让它一个接一个地击中两个函数

我已经研究了foreach循环,但无法使其工作。

echo ""
$num = read-host "Select a number"
echo ""

$num.split(",")
ForEach($answer in $num){

if ($answer -eq 1){uninstall}
if ($answer -eq 2){flashjava}
if ($answer -eq 3){reader}
if ($answer -eq 4){firefox}
if ($answer -eq 5){chrome}
if ($answer -eq 6){office}
if ($answer -eq 7){reader}
if ($answer -eq 8){updates}
if ($answer -eq 9){exit}

}

else {write-host -ForegroundColor red "Invalid Selection"
    sleep 2
    mainmenu
    }
echo ""

我知道Else声明除了单个1-9之外还会捕获任何其他声明。我试过评论那个部分,但仍然没有。如果我选择一个数字但不是倍数,它可以工作。我也尝试将数字放在引号中的if语句中。它还显示我在运行函数或退出之前选择的数字。我想不显示任何输出。

谢谢!

更新:环顾四周后,我找到了开关参数。似乎工作得很好!

   do {
   do {
    cls
    write-host ""
    write-host "****************************"
    write-host "**       Main Menu        **"
    write-host "****************************"
    write-host ""

    write-host "1 - Uninstall Bundled Apps"
    write-host "2 - Install Flash & Java"
    write-host "3 - Install Adobe Reader"
    write-host "4 - Install Firefox"
    write-host "5 - Install Chrome"
    write-host "6 - Install Office 365"
    write-host "7 - Install All"
    write-host ""
    write-host "8 - Check for Installer Updates"
    write-host ""
    write-host "9 - Exit"

    write-host ""
    $answer = read-host "Select number(s)"

    $ok = $answer -match '[123456789]+$'
    if ( -not $ok) {write-host "Invalid selection"
                    sleep 2
                    write-host ""
                    }
    } until ($ok)

    switch -Regex ( $answer ) {
    "1" {uninstall}
    "2" {flashjava}
    "3" {reader}
    "4" {firefox}
    "5" {chrome}
    "6" {o365}
    "7" {uninstall}
    "8" {updates}
    }

    } until ( $answer -match "9" )

    }

1 个答案:

答案 0 :(得分:1)

你真的很亲密。主要问题是<%= f.input :message, :input_html => {:rows => 10} %> 返回数组,但不会修改$num.Split(),因此当您在$num循环中使用$num时,您使用的是原始值。看看这里的变化:

foreach()

现在只是为了清理一下,让我们用echo "" $num = read-host "Select a number" echo "" $nums = $num.split(",") ForEach($answer in $nums){ if ($answer -eq 1){uninstall} if ($answer -eq 2){flashjava} if ($answer -eq 3){reader} if ($answer -eq 4){firefox} if ($answer -eq 5){chrome} if ($answer -eq 6){office} if ($answer -eq 7){reader} if ($answer -eq 8){updates} if ($answer -eq 9){exit} } # else {write-host -ForegroundColor red "Invalid Selection" # sleep 2 # mainmenu # } # commented out because this else no longer corresponds to anything echo ""

来看一下
switch