
あるフォルダから別のフォルダにファイルをコピーしようとしています。ファイルにはランダムなプレフィックスが付いています。しかし、ファイル名の最後の部分は 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" }
私のファイルは次のようになります:
{001588D8-5FF0-409C-9BF7-A3AE6D0B26CF} - AppImage20160520115646078.jpg
CSV ファイルにはファイル名のこの部分のみが含まれます:
AppImage20160520115646078.jpg
答え1
*
ではワイルドカードを使用します-filter "*$($_.Fil)"
。
一方、Copy-Item
ドキュメンテーションその-Path
パラメータはワイルドカード文字は受け付けません。
$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" }
}
または(おそらくもっと良い)
$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"
}
答え2
スクリプト ファイル (例: 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
}