PowerShell循环删除文件夹脚本:实现回车终止无报错需求
修复PowerShell删除文件夹脚本的回车终止问题
先给你修复后的可正常终止且无报错的脚本:
do { $destination = 'E:\TestEnv\deleted_images\' $ListFile = 'E:\TestEnv\deleted_images\' Get-ChildItem $ListFile $Foldername = Read-Host -Prompt "Please Enter Folder name to be deleted" # 直接按回车时终止脚本 if ([string]::IsNullOrEmpty($Foldername)) { Write-Host "脚本已终止" break } $FilePath = Join-Path $ListFile $Foldername $FileExists = Test-Path $FilePath if ($FileExists) { Remove-Item $FilePath -Recurse -Force Write-Host "文件夹 $Foldername 已成功删除" } else { Write-Host "未找到指定文件夹:$Foldername" } } while ($true)
关键修改点说明:
- 变量名统一修正:原脚本里混用了
$Foldername和$FileName,导致路径拼接错误,现在全部统一为$Foldername,确保路径生成正确。 - 空输入直接终止:增加了空值判断,当你直接按回车时,
$Foldername为空,脚本会直接跳出循环,不会执行后续的删除逻辑,避免报错。 - 删除命令优化:使用拼接好的完整路径
$FilePath执行删除,同时加上-Recurse -Force参数,确保能删除包含子文件/子文件夹的目标目录,避免因目录非空导致的删除失败。 - 循环逻辑简化:把循环条件改为
while($true),由内部的break控制终止,逻辑更直观易懂。
原脚本报错原因:
原脚本回车时,$Foldername为空值,循环条件$Foldername -match '.+'不成立,循环本应终止,但终止前会执行Remove-item $Foldername——因为$Foldername是空的,PowerShell会报错找不到要删除的对象。而你的移动脚本之所以没报错,是因为回车时$Filename为空,Test-Path返回false,不会执行move-item命令,所以没触发错误。
内容的提问来源于stack exchange,提问作者sanjacob
相关产品推荐
相关产品推荐

