【发布时间】:2013-01-21 03:17:55
【问题描述】:
我正在使用以下命令将文件从网络共享复制到基于 CSV 文件的本地硬盘。
import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\'}
下一步是使用不同的 CSV 文件根据当前文件名重命名这些文件。
是否有一个命令可以让我复制和项目并重命名它?
【问题讨论】:
标签: powershell
我正在使用以下命令将文件从网络共享复制到基于 CSV 文件的本地硬盘。
import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\'}
下一步是使用不同的 CSV 文件根据当前文件名重命名这些文件。
是否有一个命令可以让我复制和项目并重命名它?
【问题讨论】:
标签: powershell
如果您的 CSV 包含两列,oldfilepath 和 newfilename,那么您可以使用以下内容。
Import-Csv C:\test.csv | % { Copy-Item -Path $_.oldfilepath -Destination "C:\TEST\$($_.newfilename)" }
注意$_.newfilename 是如何封装在$() 中的。那是因为$_.newfilename 是一个表达式(因为我们从变量中获取了一个属性),而不是一个变量。 $() 告诉 PowerShell 在字符串中使用表达式之前先对其进行求解。如果我们不使用它,它将使用该行的整个 csv 对象 ($_) 作为字符串并返回错误。
【讨论】:
如果您的原始 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 并不是真正必需的,因为它们是由位置暗示的。
【讨论】: