Copie arquivos de uma pasta para outra com prefixo aleatório

Copie arquivos de uma pasta para outra com prefixo aleatório

Estou tentando copiar arquivos de uma pasta para outra. Eu tenho algum tipo de prefixo aleatório em meus arquivos. mas tenho a última parte do nome do arquivo em um arquivo csv.

New-Item -ItemType Directory -Path "\\newpart\xxx\$((Get-Date).ToString('dd-MM-yyyy'))_test" -Force
Import-Csv '\\csvpath\xxx\file.csv' | 
  ForEach {Copy-Item -path \\oldpath\xxx\* -filter $($_.Fil) "\\newpath\xxx\$((Get-Date).ToString("dd-MM-yyyy"))_text" }

meus arquivos são assim:

{001588D8-5FF0-409C-9BF7-A3AE6D0B26CF} - AppImage20160520115646078.jpg

O arquivo CSV possui apenas esta parte do nome do arquivo:

AppImage20160520115646078.jpg

Responder1

Use *curinga em -filter "*$($_.Fil)".

Por outro lado,Copy-Itemdocumentaçãodiz que seu -Pathparâmetronão aceita caracteres curinga.

$newTarget = "\\newpart\xxx\$((Get-Date).ToString('dd-MM-yyyy'))_test"
New-Item -ItemType Directory -Path "$newTarget" -Force
Import-Csv '\\csvpath\xxx\file.csv' | 
    ForEach { 
        Get-ChildItem "\\oldpath\xxx\*$($_.Fil)" -File -ErrorAction SilentlyContinue |
            ForEach { Copy-Item -path $PSItem.FullName -Destination "$newTarget" }
    }

ou (talvez melhor)

$newTarget = "\\newpart\xxx\$((Get-Date).ToString('dd-MM-yyyy'))_test"
New-Item -ItemType Directory -Path "$newTarget" -Force
Import-Csv '\\csvpath\xxx\file.csv' | 
    ForEach { 
        Get-ChildItem "\\oldpath\xxx\*$($_.Fil)" -File -ErrorAction SilentlyContinue |
            Copy-Item -Destination "$newTarget"
    }

Responder2

Você deve conseguir fazer isso em um arquivo de script, por exemplo, Copy-FilesFromCsv.ps1:

#mkdir files
#touch "files\{001588D8-5FF0-409C-9BF7-A3AE6D0B26CF} - AppImage20160520115646078.jpg"

$csvPath = "$PSScriptRoot\" # "\\csvpath\xxx\"
$sourceFolder = "$PSScriptRoot\files\"
$newFolder = "$PSScriptRoot\files\$((Get-Date).ToString('dd-MM-yyyy'))_test"
New-Item -WhatIf -ItemType Directory $newFolder -Force


ForEach ($file in $(Import-Csv "${csvPath}file.csv"))
{
    Copy-Item -WhatIf -Path "$sourceFolder*$($file.Fil)" -Destination $newFolder
}

informação relacionada