SOLVED

Problem with CopyItem cmdlet

Brass Contributor

Hi

 

I use PowerShell 7.x on Windows 11 Update.

 

I should copy all the txt files from the Test1 directory to the Test2 directory.

I tried writing

 

 

Copy-Item -Path .\Test1\ -Filter *.txt -Destination .\Test2\

 

 

but, in the destination directory, the source directory is created instead of copying the txt files. How come?

 

Thanks

 

Bye

3 Replies
best response confirmed by balubeto (Brass Contributor)
Solution

@balubeto 

 

The source path requires a wildcard at the end as shown below. Without this wildcard, the command will copy the directory object only, not the child content.

 

Copy-Item -Path .\Test1\* -Filter *.txt -Destination .\Test2\

 

Cheers,

Lain

I put some txt files in the working directory and created two subdirectories Test1 and Test2.

 

Afterwards, I wrote

 

Copy-Item -path .\* -Filter *.txt -Destination .\Test?\

 

but it gives me error.

 

Instead, if I write the two commands ,

 

Copy-Item -path .\* -Filter *.txt -Destination .\Test1\
Copy-Item -path .\* -Filter *.txt -Destination .\Test2\

 

the txt files are copied to both directories.

 

So, why does the wildcard not work?

 

Thanks

 

Bye

@balubeto 

 

If you take a look at the commandlet reference below, you'll notice that that the "-Path" parameter states you can use wildcards while the "-Destination" parameter does not.

 

You'll also notice that "-Path" is a string array (shown as "string[]") where "-Destination" is only a single-valued string.

 

So, in terms of what these combinations allow and don't allow:

 

  • Path accepts multiple source strings which can include wildcards;
  • Destination only accepts a single destination string and no wildcards.

 

Reference:

 

 

If you want to copy a given set of files to multiple destinations then you will have to do exactly what you said, which is use multiple Copy-Item statements.

 

Cheers,

Lain

1 best response

Accepted Solutions
best response confirmed by balubeto (Brass Contributor)
Solution

@balubeto 

 

The source path requires a wildcard at the end as shown below. Without this wildcard, the command will copy the directory object only, not the child content.

 

Copy-Item -Path .\Test1\* -Filter *.txt -Destination .\Test2\

 

Cheers,

Lain

View solution in original post