我使用以下命令根据CSV文件将文件从网络共享复制到本地硬盘。
import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\'}
下一步是使用不同的CSV文件根据当前文件名重命名这些文件。
是否有一个允许我复制和重命名的命令?
答案 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并不是必需的,因为它们是由位置隐含的。