是否有单个PowerShell命令来复制和重命名文件?

时间:2013-01-21 03:17:56

标签: powershell

我使用以下命令根据CSV文件将文件从网络共享复制到本地硬盘。

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

下一步是使用不同的CSV文件根据当前文件名重命名这些文件。

是否有一个允许我复制和重命名的命令?

2 个答案:

答案 0 :(得分:20)

如果您的CSV包含两列,oldfilepath和newfilename,则可以使用以下内容。

Import-Csv C:\test.csv | % { Copy-Item -Path $_.oldfilepath -Destination "C:\TEST\$($_.newfilename)" }

注意$_.newfilename是如何封装在$()中的。那是因为$_.newfilename是一个表达式(因为我们从变量中得到一个属性),而不是变量。 $()告诉PowerShell在字符串中使用它之前解决该表达式。如果我们不使用它,它会将该行的整个csv-object($_)用作字符串并返回错误。

答案 1 :(得分:17)

如果原始CSV中还包含新名称,您可以使用它在复制路径末尾指定文件名。复制项CMDlet允许您指定目标文件名

Copy-Item C:\TEST\file1.jpg C:\TEST\file2.jpg

将复制file1.jpg并将其重命名为file2.jpg

要将变量连接到路径字符串的末尾,您可以使用双引号,如下所示:

Copy-Item C:\Path\To\File\file.ext "C:\Path\To\New\File\$newfilename"

请注意,-path和-destination并不是必需的,因为它们是由位置隐含的。