Ric*_*cky 4 powershell copy file-rename
我编写的脚本(应该)执行以下操作时遇到了持续的问题。我有一个文件夹,其中包含许多 csv 文件,我想将带有公司名称的最新文件复制到另一个文件夹中,并重命名它。
当前格式为:
21Feb17070051_CompanyName_Sent21022017
Run Code Online (Sandbox Code Playgroud)
我希望它采用以下格式:
CompanyName21022017
Run Code Online (Sandbox Code Playgroud)
所以我有以下 powershell 脚本来执行此操作:
## Declare variables ##
$DateStamp = get-date -uformat "%Y%m%d"
$csv_dest = "C:\Dest"
$csv_path = "C:\Location"
## Copy latest Company CSV file ##
get-childitem -path $csv_path -Filter "*Company*.csv" |
where-object { -not $_.PSIsContainer } |
sort-object -Property $_.CreationTime |
select-object -last 1 |
copy-item -Destination $csv_dest
## Rename the file that has been moved ##
get-childitem -path $csv_dest -Filter "*Company*.csv" |
where-object { -not $_.PSIsContainer } |
sort-object -Property $_.CreationTime |
select-object -last 1 | rename-item $file -NewName {"Company" + $DateStamp + ".csv"}
Run Code Online (Sandbox Code Playgroud)
文件似乎复制正常,但重命名失败 -
Rename-Item : Cannot bind argument to parameter 'Path' because it is null.
At C:\Powershell Scripts\MoveCompanyFiles.ps1:20 char:41
+ select-object -last 1 | rename-item $file -NewName {"CompanyName" + $DateSt ...
Run Code Online (Sandbox Code Playgroud)
我认为这与 powershell 的工作顺序有关,或者与 $file 变量中看不到 .csv 的事实有关。目标中还有其他文件(文本文件、批处理文件),以防影响。任何对我出错的地方的帮助将不胜感激。
正如 wOxxOm 回答的那样,您需要$file从中删除Rename-Item,因为它未定义,并且 cmdlet 已通过管道接收输入对象。
fileinfo我还建议您通过将复制文件的 -object传递到Rename-Item. 前任:
## Declare variables ##
$DateStamp = get-date -uformat "%Y%m%d"
$csv_dest = "C:\Dest"
$csv_path = "C:\Location"
## Copy and rename latest Company CSV file ##
Get-ChildItem -Path $csv_path -Filter "*Company*.csv" |
Where-Object { -not $_.PSIsContainer } |
Sort-Object -Property CreationTime |
Select-Object -Last 1 |
Copy-Item -Destination $csv_dest -PassThru |
Rename-Item -NewName {"Company" + $DateStamp + ".csv"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16169 次 |
| 最近记录: |