Powershell 3.0:搜索特定文件名并将其发送到.txt文件
这是我的密码:Powershell 3.0:搜索特定文件名并将其发送到.txt文件,powershell,Powershell,这是我的密码: Get-ChildItem 'R:\Source\Path' | ForEach-Object { $_.Name -notlike '*condition*' } > 'R:\Destination\Path\File.txt' 代码在某种程度上起作用。除了将文件名复制到目标之外,它还根据条件的状态将true或false写入文本文件。因此,我希望有一个.txt文件名列表,而我有如下内容: True True False True False False ……等等 我做
Get-ChildItem 'R:\Source\Path' |
ForEach-Object { $_.Name -notlike '*condition*' } > 'R:\Destination\Path\File.txt'
代码在某种程度上起作用。除了将文件名复制到目标之外,它还根据条件的状态将true或false写入文本文件。因此,我希望有一个.txt文件名列表,而我有如下内容:
True
True
False
True
False
False
……等等
我做错了什么?要过滤输出,请使用
Where Object
而不是ForEach Object
:
Get-ChildItem |Where-Object {$_.Name -notlike "*.zip"} > output.txt
要获取文件的完整路径而不获取其他内容,请使用选择对象-ExpandProperty
:
Get-ChildItem |Where-Object {$_.Name -notlike "*.zip"} |Select-Object -ExpandProperty FullName > output.txt
或者更改原始ForEach对象脚本块中的逻辑,以实际作用于-notlike
的结果:
Get-ChildItem |ForEach-Object {
if($_.Name -notlike "*.zip"){
$_.FullName
}
} > output.txt
您正在将命令的输出重定向到文件
$\uU4.Name-notlike'*condition*'
返回一个布尔值,这就是为什么您可以看到您所做的事情。将它改为where对象,而不是foreach对象在我发布了这个问题后,我用where对象测试了它,它成功了!非常感谢你的回复,不过,我真的很感激!我对powershell很陌生,如果这是个愚蠢的问题,我很抱歉,但是.Name和.FullName之间有什么区别?@GalenH文件名和完整文件路径。@GalenHGet ChildItem
返回类型为FileInfo
或DirectoryInfo
的对象-它们都有Name
和FullName
属性Name
是文件/目录的名称-FullName
是文件/目录的完整文件系统路径哦,好吧,太酷了!最后一个问题,当我运行Where对象代码时,我得到了一个包含模式、上次写入时间、长度和名称的文本文件。我是否可以实现另一个只传递名称信息的过滤器?@GalenH已经显示,使用选择对象-ExpandProperty
。如果要避免额外的间距,请使用|Out File
而不是