I'm new to powershell and this question will prove that point. I'm trying a simple task from the command line where I have a txt file containing filenames separated by semicolons like...
fnameA.ext;fnameB.ext;fnameC.ext;....
I'm trying to run a command which will parse this file, split the contents by semicolon, and then run a copy command for each file to a desired directory.
Here is the command I'm running:
gc myfile.txt |% {$_.split(";") | copy $_ "C:\my\desired\directory"}
But I'm getting an error like this for each item in the list...
Copy-Item : The input object cannot be bound to any parameters for the command either because the command does not take
pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
At line:1 char:36
+ gc bla.txt |% {$_.split(";") | copy <<<< $_ "C:\my\desired\directory"}
+ CategoryInfo : InvalidArgument: (fileA.txt:String) [Copy-Item], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.CopyItemCommand
Resist the urge to make one-liners, especially when you're starting out. That said, the problem is you need to pipe the split content to another ForEach-Object
.
Try this:
$File = Get-Content .\MyFile.txt
$File | ForEach-Object {
$_.Split(';') | ForEach-Object {
Copy-Item -Path "$_" -Destination 'C:\destination'
}
}
Just a note: you don't need to nest for-eachs (@Bacon) or use parenthesis (@JPBlanc), just use
Get-Content d:\test\file.txt |
Foreach-Object {$_ -split ';'} |
Copy-Item -dest d:\test\xx
Also note that you use relative paths to files, which might bite you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With