首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查路径是PowerShell中的文件夹还是文件

检查路径是PowerShell中的文件夹还是文件
EN

Stack Overflow用户
提问于 2016-10-03 14:11:05
回答 3查看 32.5K关注 0票数 27

我正在尝试编写一个PowerShell脚本,该脚本遍历文件夹或文件路径的值列表,并首先删除文件,然后删除空文件夹。

到目前为止,我的脚本如下:

代码语言:javascript
运行
复制
[xml]$XmlDocument = Get-Content -Path h:\List_Files.resp.xml
$Files =  XmlDocument.OUTPUT.databrowse_BrowseResponse.browseResult.dataResultSet.Path

现在,我正在尝试测试变量中的每一行,看看它是否是一个文件,并首先删除它,然后遍历并删除子文件夹和文件夹。这只是为了让它是一个干净的过程。

下一步我不能让它工作,但我认为我需要这样的东西:

代码语言:javascript
运行
复制
foreach ($file in $Files)
{
    if (! $_.PSIsContainer)
    {
        Remove-Item $_.FullName}
    }
}

下一节可以清理子文件夹和文件夹。

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2019-07-29 21:17:44

我找到了解决此问题的方法:使用参数-FileType等于LeafTest-Path cmdlet检查它是否为文件,或使用Container检查它是否为文件夹:

代码语言:javascript
运行
复制
# 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

我最初找到了解决方案here。官方的参考资料是here

票数 31
EN

Stack Overflow用户

发布于 2021-06-24 14:50:30

我们可以使用get-item命令并提供路径。然后,您可以检查PSIsContainer (boolean)属性,该属性将确定所提供的路径针对的是文件夹还是文件。例如:

代码语言:javascript
运行
复制
$target = get-item "C:\somefolder" # or "C:\somefolder\somefile.txt"
if($target.PSIsContainer) {
# it's a folder
}
else { #its a file }

希望这对任何未来的访问者有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2016-10-03 15:55:53

考虑以下代码:

代码语言:javascript
运行
复制
$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

代码语言:javascript
运行
复制
foreach ($file in $Files)
{
    $file.FullName
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39825440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档