我正在尝试编写一个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}
}
}
下一节可以清理子文件夹和文件夹。
有什么建议吗?
发布于 2019-07-29 21:17:44
我找到了解决此问题的方法:使用参数-FileType
等于Leaf
的Test-Path
cmdlet检查它是否为文件,或使用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
# Check if folder
Test-Path -Path 'C:\Demo' -PathType Container
发布于 2021-06-24 14:50:30
我们可以使用get-item
命令并提供路径。然后,您可以检查PSIsContainer
(boolean)属性,该属性将确定所提供的路径针对的是文件夹还是文件。例如:
$target = get-item "C:\somefolder" # or "C:\somefolder\somefile.txt"
if($target.PSIsContainer) {
# it's a folder
}
else { #its a file }
希望这对任何未来的访问者有所帮助。
发布于 2016-10-03 15:55:53
考虑以下代码:
$Files = Get-ChildItem -Path $env:Temp
foreach ($file in $Files)
{
$_.FullName
}
$Files | ForEach {
$_.FullName
}
第一个foreach是用于循环的PowerShell语言命令,第二个ForEach是完全不同的ForEach-Object
cmdlet的别名。
在ForEach-Object
中,$_
指向从$Files
集合传入的循环中的当前对象,但在第一个foreach中,$_
没有任何意义。
在foreach循环中,使用循环变量$file
foreach ($file in $Files)
{
$file.FullName
}
https://stackoverflow.com/questions/39825440
复制相似问题