我正在尝试编写一个PowerShell脚本,该脚本遍历文件夹或文件路径的值列表,并首先删除文件,然后删除空文件夹。
到目前为止,我的脚本如下:
[xml]$XmlDocument = Get-Content -Path h:\List_Files.resp.xml $Files = XmlDocument.OUTPUT.databrowse_BrowseResponse.browseResult.dataResultSet.Path
现在,我正在尝试测试变量中的每一行,看看它是否是一个文件,并首先删除它,然后遍历并删除子文件夹和文件夹。这只是为了让它是一个干净的过程。
下一步我不能让它工作,但我认为我需要这样的东西:
foreach ($file in $Files) if (! $_.PSIsContainer) Remove-Item $_.FullName} }
下一节可以清理子文件夹和文件夹。
有什么建议吗?
【玩转 GPU】有奖征文
精美礼品等你拿!
考虑以下代码:
$Files = Get-ChildItem -Path $env:Temp foreach ($file in $Files) $_.FullName $Files | ForEach { $_.FullName }
第一个foreach是用于循环的PowerShell语言命令,第二个ForEach是完全不同的 ForEach-Object cmdlet的别名。
ForEach-Object
在 ForEach-Object 中, $_ 指向从 $Files 集合传入的循环中的当前对象,但在第一个foreach中, $_ 没有任何意义。
$_
$Files
在foreach循环中,使用循环变量 $file
$file
foreach ($file in $Files) $file.FullName }
我找到了解决此问题的方法:使用参数 -FileType 等于 Leaf 的 Test-Path cmdlet检查它是否为文件,或使用 Container 检查它是否为文件夹:
-FileType
Leaf
Test-Path
Container
# Check if file (works with files with and without extension) Test-Path -Path 'C:\Demo\FileWithExtension.txt' -PathType Leaf Test-Path -Path 'C:\Demo\FileWithoutExtension' -PathType Leaf