【问题标题】:PowerShell complaining about path, But path is validPowerShell抱怨路径,但路径有效
【发布时间】:2014-09-20 09:04:37
【问题描述】:

在下面的代码中,当 $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

【问题讨论】:

    标签: powershell rename-item-cmdlet


    【解决方案1】:

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

    powershell命令的完整形式是

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

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

    get-childItem *.txt | rename-item -newname { $_.name -replace '\.txt','.log' }
    

    【讨论】:

    • 很棒的信息。感谢添加!
    【解决方案2】:

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

    Convert-Path C:\dbbackups\cm_$client-*.full.bak | % {
      if (Test-Path $_) {
        Rename-Item $_ cm_$client.bak
      }
    }
    

    【讨论】:

    • 这不会丢失文件,因为您要将与通配符匹配的所有项目重命名为相同的名称?
    • @Eris 该问题似乎也在原始问题中。所以史蒂文正在保留这个错误。
    • @Eris 到select -f 1 的管道可以修复它
    • 感谢史蒂文的回答,它工作得很好!打算将文件重命名为相同的名称。虽然目的是获取最新的并删除其余的,但我可能必须为此编写明确的代码。
    猜你喜欢
    • 2021-01-16
    • 2016-08-31
    • 1970-01-01
    • 2017-12-11
    • 2016-07-24
    • 2013-06-03
    • 2019-02-02
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多