gpt4 book ai didi

powershell - Get-ChildItem,通配符和过滤

转载 作者:行者123 更新时间:2023-12-02 23:20:02 25 4
gpt4 key购买 nike

我有两种使用通配符模式获取文件的方式:

Get-ChildItem "$ActivityLogDirectory/*.csv"


Get-ChildItem "$ActivityLogDirectory" -Filter *.csv

我更喜欢使用后者而不是前者,因为前者( Get-ChildItem "$ActivityLogDirectory/*.csv")有时会给我一个权限被拒绝的错误。

它们似乎都返回相同的结果,但是当我尝试使用此命令压缩结果文件时:
Compress-Archive -Update -Path $CsvFiles -DestinationPath C:\Users\admin\Downloads\foo.zip

前者成功,而后者失败,并出现以下错误:

Compress-Archive:路径“rgb开发自动化商店a_1-1_2194_20181120.csv”
要么不存在,要么不是有效的文件系统路径。
在第1行:char:1
+压缩存档-更新-路径$ CsvFiles -DestinationPath C:\ Users \ ad ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:InvalidArgument:(rgb dev automat ... 94_20181120.csv:String)[Compress-Archive],InvalidOperationException
+ FullyQualifiedErrorId:ArchiveCmdletPathNotFound,压缩存档

那么这两种使用通配符获取文件列表的方式有什么区别?或以另一种方式问到,为什么使用 -Filter *.csv导致 Compress-Archive cmdlet失败?

enter image description here

最佳答案

您看到不同行为的原因是-晦涩的情况-Get-ChildItem输出的对象的字符串化行为:

This answer详细说明了何时Get-ChildItem输出字符串化为纯文件名而不是完整路径,以及Get-ChildItem "$ActivityLogDirectory" -Filter *.csv字符串化为纯文件名。

的解决方法是通过FullName属性(PSv3 +语法)将对象明确字符串化为其完整路径:

$CsvFiles = (Get-ChildItem "$ActivityLogDirectory" -Filter *.csv).FullName

关于powershell - Get-ChildItem,通配符和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53529385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com