2

在下面的代码中,当 $client = XRS1

if (Test-Path C:\dbbackups\cm_$client-*.full.bak){
Rename-Item -path C:\dbbackups\cm_$client-*.bak -newname cm_$client.bak
Write-Host "New file found, renamed to: cm_$client.bak"

Test-Path 语句可以找到 C:\dbbackups\cm_xrs1-2013414.full.full.bak 但 Rename-Item 中的 -path 找不到。

我得到的错误是

Rename-Item : Cannot process argument because the value of argument "path" is not valid. Change the value of the "path" argument and run the operation again.
At C:\Users\Aaron\Documents\0000 - PowerShell DB Update Utility\UpdateCMDatabases.ps1:167 char:1
+ Rename-Item -path C:\dbbackups\cm_$client-*.bak -newname cm_$client.bak
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RenameItemCommand
4

2 回答 2

11

对于那些只需要一行命令的人,请注意,这是仅 powershell 的错误,并且此命令在良好的旧命令提示符下工作得很好。

powershell 命令的完整形式是

ren -Path [something with a wildcard] -NewName [something else]

该错误与 Path 参数的值有关。它在路径中接受通配符,但它必须解析为单个文件[1]。要将通配符与 powershell 一起使用,您需要将它们一一通过管道传递给 rename item 命令。这是一个将 txt 文件重命名为 log [2]的示例:

get-childItem *.txt | rename-item -newname { $_.name -replace '\.txt','.log' }
于 2015-05-05T09:15:30.657 回答
1

如果 Rename-Item 不喜欢通配符,则不要给它一个

Convert-Path C:\dbbackups\cm_$client-*.full.bak | % {
  if (Test-Path $_) {
    Rename-Item $_ cm_$client.bak
  }
}
于 2014-07-29T03:55:00.577 回答