I am trying to use PowerShell (v.1) to copy over only files that match a pattern. The file naming convention is:
Daily_Reviews[0001-0871].journal
Daily_Reviews[1002-9887].journal
[...]
When I run it, the method "Copy-Item" complains:
Dynamic parameters for cmdlet cannot be retrieved. The specified wildcard pattern is not valid: Daily_Reviews[0001-0871].journal
+ Copy-Item <<<< $sourcefile $destination
It's because of the "[" and "]" in the file names. When I remove the left and right brackets, it works as expected. But looks like PowerShell 1 doesn't have the -LiteralPath flag so is there another way to get Copy-Item to work in PowerShell 1 with file names that contain brackets?
$source = "C:\Users\Tom\"
$destination ="C:\Users\Tom\Processed\"
if(-not(Test-Path $destination)){mkdir $destination | out-null}
ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d\d\d\d-\d\d\d\d\].journal" }))
{
Copy-Item $sourcefile $destination
}
Best Answer
Well, after researching this more I found a workaround: