[玩转系统] PowerShell Do While 循环解释
作者:精品下载站 日期:2024-12-14 03:46:08 浏览:13 分类:玩电脑
PowerShell Do While 循环解释
循环是任何编程或脚本语言中的基本功能之一。其中一个循环是 Do While 循环,它在条件为 true 时执行一段代码。
在PowerShell中,我们可以使用While循环和Do-While循环。它们可能看起来相同,但确实有一些差异,理解这一点很重要。
在本文中,我将解释这两个循环之间的区别,并展示如何在脚本中使用 Do-While 循环。
PowerShell Do While 循环
编写脚本时,有时需要执行一段代码 x 时间,直到满足条件。我们可以使用循环来完成此操作,循环是我们可以使用的控制流语句之一。
现在在 PowerShell 中,我们实际上可以使用三种不同的循环类型:
- While 循环
- 执行 While 循环
- 执行直到循环
While 循环仅在条件为真时执行循环内的代码。但是,Do While 和 Do Until 将至少执行循环中的代码一次。这是一个需要牢记的重要区别。
Do-While 和 Do-Until 的区别在于,前者只要条件为真就会执行循环中的代码。而 Do-Until 只要条件为 false 就执行代码。
另外值得一提的是,在循环完成之前,PowerShell 不会继续执行脚本。
使用 Do-While 循环
要在脚本中使用 Do-While 循环,我们需要定义将在 Do 部分中执行的代码,并在 While 部分中添加条件。
让我们看一个简单的例子。下面的代码将写入当前数字 ($i
),并加 1,只要 $i
小于 5:
$i = 0
do {
# code to execute
Write-Host "The number is $i"
$i++
} while ($i -le 5)
尝试上面的示例,只需将其复制并粘贴到 Windows 终端中即可。您将看到当条件为真时代码正在执行。
继续和中断
在 PowerShell 中使用循环时,我们可以使用 Continue
和 Break
来控制或干扰循环的流程。当循环内遇到 Break 语句时,脚本会跳出循环并在循环下方继续执行下一行代码。无论 While 语句中指定的条件如何,都会执行此操作。
另一方面,Continue 将停止处理循环中的当前项,并跳转到下一次迭代。 continue 语句将重新评估 while 条件。因此,如果在 continue 语句之前满足条件,则 Do-While 循环结束。
让我们看一下循环内的Continue 示例。下面的代码将从给定目录获取所有文件。如果我们找到隐藏文件,则会触发Continue语句,使其转到下一个:
$files = Get-ChildItem "C:\Temp"
$i = 0
Do {
$file = $files[$i]
if ($file.Attributes -match "Hidden") {
$i++
continue # Skip hidden files
}
Write-Host "Processing file: $file.Name"
$i++
} While ($i -lt $files.Count)
例如,Break 语句可用于检查我们是否仍要继续循环。下面的示例将询问用户是否要继续,如果答案是否定的,我们将退出循环:
Do {
$response = Read-Host "Do you want to continue? (yes/no)"
if ($response -eq "no") {
Write-Host "Exiting loop."
break # Exit the loop if the user chooses "no"
}
Write-Host "Continuing..."
} While ($response -ne "no")
Write-Host "Loop ended."
Do-While 示例
就我个人而言,我发现通过示例学习编程或脚本编写更容易。因此,我创建了几个现实的 Do-While 示例来帮助您入门。
我们要查看的第一个脚本是一个小脚本,它将等待指定的服务运行。在此示例中,我们将等待 Windows 更新服务运行。请记住,在满足 While 条件之前,PowerShell 不会执行 Do While 循环下面的代码:
$serviceName = "wuauserv" # Windows Update service
$serviceStatus = (Get-Service -Name $serviceName).Status
Do {
Write-Host "Waiting for the service '$serviceName' to start..."
Start-Sleep -Seconds 5
$serviceStatus = (Get-Service -Name $serviceName).Status
} While ($serviceStatus -ne "Running")
Write-Host "The service '$serviceName' is now running."
对于上面的示例,您实际上会从 If-Else 语句开始,检查服务是否正在运行。如果该服务未运行,您可以启动它,然后使用上面的代码等待它启动并运行。
验证用户输入
另一个常见用例是当您需要验证脚本中的用户输入时。我们可以使用 Do-While 循环不断请求新输入,直到它符合我们定义的条件。例如,我们要求提供电子邮件地址,并在继续之前检查它是否与电子邮件地址模式匹配:
$emailPattern = "^[\w\.-]+@[\w\.-]+\.\w+$"
$email = ""
Do {
$email = Read-Host "Enter a valid email address"
} While ($email -notmatch $emailPattern)
Write-Host "Valid email entered: $email"
在 While 条件下,我们不限于一种条件。我们可以有多个条件,并使用 -And
或 -Or
运算符组合它们。例如,我们可以设置用户可以猜测的最大数量:
$maxAttempts = 3
$attempts = 0
do {
$input = Read-Host "Enter a number between 1 and 10"
$attempts++
} while (($input -lt 1 -or $input -gt 10) -and ($attempts -ne $maxAttempts))
无限循环
如果将条件设置为 true,则可以在 PowerShell 中创建无限循环。循环内的代码将被执行,直到循环内的$condition
为真。然后我们可以使用 Break
语句退出循环。
Do {
# Do stuff forever
Write-Host 'looping'
# Use Break to exit the loop
If ($condition) {
Break
}
} While ($true)
下载文件尝试
当您想尝试某些东西时,Do-while 循环也是一个不错的选择。在下面的示例中,我们将尝试下载文件。使用 Try-Catch 块,我们可以检查下载尝试是否成功。
我们将继续尝试下载该文件,直到成功或达到最大尝试次数。
$url = "https://example.com/file.zip"
$destination = "C:\Downloads\file.zip"
$attempt = 0
$maxAttempts = 5
Do {
$attempt++
Write-Host "Attempt $attempt: Downloading file..."
try {
Invoke-WebRequest -Uri $url -OutFile $destination
$success = $true
} catch {
Write-Host "Download failed, retrying..."
Start-Sleep -Seconds 5
$success = $false
}
} While (-not $success -and $attempt -lt $maxAttempts)
if ($success) {
Write-Host "File downloaded successfully!"
} else {
Write-Host "Failed to download file after $maxAttempts attempts."
}
总结
Do-While 循环是在 PowerShell 中使用的一个很好的控制流语句。请记住,Do 循环内的代码始终至少执行一次。如果您只想在满足条件时执行代码,则需要使用普通的 While 循环。
如果您想了解有关 PowerShell 的更多信息,请务必查看其他 PowerShell 文章,当然还有备忘单。如果您有任何疑问,请在下面发表评论。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag