toolshed
toolshed

Reputation: 2029

How do I consolidate copy and rename commands into one using Powershell?

Currently I am using PS to copy files from a network location based on a CSV file, then I am renaming them using a variation of the same data. This requires that I run two separate commands.

How do I consolidate these commands into one?

Copy:

import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\'}

Paste:

import-csv C:\TEST\test.csv | foreach {rename-item -path $_.lpath -newname $_.newalias}

Notice that the -path trigger in each case refers to a separate variable header, npath vs. lpath which correspond to the network file location, and then a local file location which have been manually entered.

On the same note, how could I concatenate this variable to constant data. If I have a variable fn which represents the file name and another path, could I theoretically do:

foreach {rename-item -path 'C:\TEST\' + $_.fn

Or:

foreach {rename-item -path $_.path + $_.fn

Upvotes: 2

Views: 261

Answers (1)

rerun
rerun

Reputation: 25505

Just append the two commands

import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\';rename-item -path $_.lpath -newname $_.newalias  }

for your second question there are lots of ways to append string

C:(...)WindowsPowerShell>$data = "bob"

C:(...)WindowsPowerShell>echo "this is a $data"

C:(...)WindowsPowerShell>$concat = "hi" + " george"

C:(...)WindowsPowerShell>$concat
hi george

C:(...)WindowsPowerShell>[string]::Format("{0} {1}","string 1","string 2")
string 1 string 2

Upvotes: 2

Related Questions