Powershell移动文件与备份(如mv --backup =编号)

问题描述 投票:1回答:1

我在寻找是否有一个PS命令等于mv --backup =编号,并且找不到任何东西。

本质上,将'file'移动到'file.old',但如果'file.old'存在,'file'应该移动到'file.old.2'。

现在我发现的最接近的是这个链接:https://www.pdq.com/blog/copy-individual-files-and-rename-duplicates/

$SourceFile = "C:\Temp\File.txt"
$DestinationFile = "C:\Temp\NonexistentDirectory\File.txt"

If (Test-Path $DestinationFile) {
    $i = 0
    While (Test-Path $DestinationFile) {
        $i += 1
        $DestinationFile = "C:\Temp\NonexistentDirectory\File$i.txt"
    }
} Else {
    New-Item -ItemType File -Path $DestinationFile -Force
}

Copy-Item -Path $SourceFile -Destination $DestinationFile -Force 

拥有这么多代码似乎非常糟糕。有什么更简单的可用吗?

powershell move mv
1个回答
1
投票

实际上,没有内置功能可以做到这一点。但是,为此目的使用您自己的功能应该不是问题。

这个怎么样:

function Copy-FileNumbered {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $true, Position = 0)]
        [ValidateScript({Test-Path -Path $_ -PathType Leaf})]
        [string]$SourceFile,

        [Parameter(Mandatory = $true, Position = 1)]
        [string]$DestinationFile
    )
    # get the directory of the destination file and create if it does not exist
    $directory = Split-Path -Path $DestinationFile -Parent
    if (!(Test-Path -Path $directory -PathType Container)) {
        New-Item -Path $directory -ItemType 'Directory' -Force
    }

    $baseName  = [System.IO.Path]::GetFileNameWithoutExtension($DestinationFile)
    $extension = [System.IO.Path]::GetExtension($DestinationFile)    # this includes the dot
    $allFiles  = Get-ChildItem $directory | Where-Object {$_.PSIsContainer -eq $false} | Foreach-Object {$_.Name}
    $newFile = $baseName + $extension
    $count = 1
    while ($allFiles -contains $newFile) {
        $newFile = "{0}({1}){2}" -f $baseName, $count, $extension
        $count++
    }

    Copy-Item -Path $SourceFile -Destination (Join-Path $directory $newFile) -Force 
}

这将在目标中创建一个新文件,如File(1).txt当然,如果您更喜欢File.2.txt这样的名称,只需将格式模板"{0}({1}){2}"更改为"{0}.{1}{2}"

使用像这样的功能

$SourceFile = "C:\Temp\File.txt"
$DestinationFile = "C:\Temp\NonexistentDirectory\File.txt"
Copy-FileNumbered -SourceFile $SourceFile -DestinationFile $DestinationFile
© www.soinside.com 2019 - 2024. All rights reserved.