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

too*_*hed 26 powershell

我使用以下命令将文件从网络共享复制到基于CSV文件的本地硬盘驱动器.

import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\'}
Run Code Online (Sandbox Code Playgroud)

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

是否有一个命令允许我复制和项目并重命名它?

Fro*_* F. 28

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

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

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


Taz*_*Taz 21

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

Copy-Item C:\TEST\file1.jpg C:\TEST\file2.jpg
Run Code Online (Sandbox Code Playgroud)

将copy1.jpg复制并重命名为file2.jpg

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

Copy-Item C:\Path\To\File\file.ext "C:\Path\To\New\File\$newfilename"
Run Code Online (Sandbox Code Playgroud)

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

  • 我的回答更多是关于 powershell 字符串变量连接的功能和性质,而不是在您不做任何工作的情况下为您提供答案。在我的例子中,我有一个变量,我正在连接一个名为 $newfilename 的变量,但显然你会用你的管道列值替换它。$_。语法用于获取管道对象的属性,而简单的 $ 只是表示一个变量,我相信你知道。很抱歉因为不精确而让您失望,但是如果您不使用函数参考并自己应用它,那么成就何在! (2认同)