我正在尝试重命名文件Members.csv
。
Get-ChildItem ".\" -Filter '*Members*.csv' | where {
$_.LastWriteTime.GetDateTimeFormats()[44] -eq $today
} | Rename-Item -NewName "hello2.csv" -Force
-Force
不起作用。如果hello2已经存在,则重命名将不会进行。
我发现此线程说我们必须使用Move-Item
。但是我不确定如何将其合并到我的代码中。
rename-item and override if filename exists
Get-ChildItem index.*.txt | ForEach-Object {
$NewName = $_.Name -replace "^(index\.)(.*)",'$2'
$Destination = Join-Path -Path $_.Directory.FullName -ChildPath $NewName
Move-Item -Path $_.FullName -Destination $Destination -Force
}
我不是要替换,而是要重命名整个名称,所以我不知道该怎么做:
$NewName = $_.Name = "hello2"
答案 0 :(得分:2)
-Force
的{{1}}参数不允许您通过重命名另一个文件来替换现有文件。来自documentation:
-强制
强制cmdlet重命名无法更改的项目,例如隐藏或只读文件或只读别名或变量。该cmdlet无法更改常量别名或变量。实施因提供商而异。有关更多信息,请参见about_Providers。
您已经发现,您需要使用Rename-Item
,它的使用方式与您在第一个代码段中尝试使用Move-Item -Force
的方式完全相同:
Rename-Item
请注意,如果在Get-ChildItem -Filter '*Members*.csv' | Where-Object {
$_.LastWriteTime.GetDateTimeFormats()[44] -eq $today
} | Move-Item -Destination "hello2.csv" -Force
之后有多个项目,则每个项目都将替换前一个项目,因此您实际上将最终删除其中一个项目。