复制txt文档中列出的文件,在PowerShell中保留多个同名文件

时间:2018-01-28 03:52:50

标签: powershell

我有一堆使用此命令在powershell中生成的文档列表:

Get-ChildItem -Recurse |
    Select-String -Pattern "acrn164524" |
    group Path |
    select Name > test.txt

在这个例子中,它生成一个包含字符串acrn164524的文件列表,输出如下所示:

Name                                                             
----                                                             
C:\data\logo.eps
C:\data\invoice.docx
C:\data\special.docx
InputStream
C:\datanew\special.docx

我一直在使用

Get-Content "test.txt" | ForEach-Object {
    Copy-Item -Path $_ -Destination "c:\destination\" -Recurse -Container -Force
}

但是,如果两个或多个文件具有相同的名称,则会出现问题,并且还会为文件中不是路径的任何行引发一堆错误。

抱歉,如果我不够清楚,我想通过在文件名的末尾添加一些内容来保留具有相同名称的文件。

1 个答案:

答案 0 :(得分:1)

您似乎想要文件,而不是Get-ChildItem -Recurse -File | Where-Object { $_ | Select-String acrn164524 -Quiet } | Select-Object -ExpandProperty FullName | Out-File test.txt 的输出。所以我们保留文件。

-File

下面

  • Get-ChildItem会使*.txt仅返回实际文件。认为 关于使用像-Quiet这样的过滤器来减少工作量。
  • Select-String$true返回$falseWhere-Object 非常适合Select-Object -ExpandProperty X

而不是Select-Object来检索原始属性值数组(而不是PSObjects数组,这是ForEach-Object X通常会做的事情),使用{{1}更简单而不是。

Get-ChildItem -Recurse -File | Where-Object {
    $_ | Select-String acrn164524 -Quiet
} | ForEach-Object FullName | Out-File test.txt