你能再次帮我写一个 powershell 脚本吗?我想检查是否存在多个文件夹,如果存在则删除整个文件夹。如果文件夹已被删除,还需要提供信息;如果文件夹不存在,则还需要提供信息。
我现在将下面的脚本用于多个文件。(感谢很好的帮助)我想对 1 个或多个文件夹使用相同的脚本。例如,删除文件夹 c:\test1\ 和 c:test2
文件夹可能会被删除,即使它们仍然包含文件。
$paths = "c:\test\1.txt", "c:\test\2.txt", "c:\test\3.txt"
foreach($filePath in $paths)
{
if (Test-Path $filePath) {
Remove-Item $filePath -verbose
} else {
Write-Host "Path doesn't exits"
}
}
Run Code Online (Sandbox Code Playgroud)
我对 powershell 不太熟悉,希望你能再次帮助我。
谢谢汤姆
要删除包含 content的目录(文件夹),您必须使用-Recurse 带有Remove-Item- 的开关,否则将显示交互式确认提示。
给定的路径存在并不一定意味着它是一个目录- 它可能是一个文件。要专门测试给定路径是否是目录/文件,请将-PathType Container/-PathType Leaf与Test-Path.
虽然仅当路径碰巧包含[字符时才严格需要,但传递文字路径的可靠方法是通过-LiteralPath文件处理 cmdlet 支持的参数 - 相比之下,第一个位置参数通常绑定到-Path参数(例如,Test-Path foo与 相同Test-Path -Path foo),它将其参数解释为通配符表达式。
应用于您的用例(请注意,不会尝试区分文件和目录):
# Input directory paths.
$paths = 'c:\test1', 'c:\test2', 'c:\test3'
foreach ($path in $paths) {
if (Test-Path -LiteralPath $path) {
Remove-Item -LiteralPath $path -Verbose -Recurse -WhatIf
} else {
"Path doesn't exist: $path"
}
}
Run Code Online (Sandbox Code Playgroud)
注意:上面命令中的-WhatIf公共参数预览操作。-WhatIf 一旦您确定该操作将按照您的要求进行,请将其删除。
另一个更有效的选项是使用Get-Item来获取表示文件系统项的对象(如果存在),并将它们通过管道传输到Remove-Item:
$paths = 'c:\test1', 'c:\test2', 'c:\test3'
Get-Item -LiteralPath $paths -ErrorAction SilentlyContinue -ErrorVariable errs |
Remove-Item -Recurse -Verbose -WhatIf
if ($errs) {
"The following path(s) do not exist: $($errs.TargetObject)"
}
Run Code Online (Sandbox Code Playgroud)
请注意使用 来-ErrorAction SilentlyContinue消除由不存在的路径引起的错误,并-ErrorVariable errs在自选变量 中收集这些错误$errs。
然后收集的实例.TargetObject的属性包含触发错误的路径,解析为完整路径。 [System.Management.Automation.ErrorRecord]$errs
| 归档时间: |
|
| 查看次数: |
12043 次 |
| 最近记录: |