Задать вопрос
@StupidMyFriend

Как добавлять +1 в название файла при копировании в другую папку, если там уже есть файл с таким названием?

Есть простой PS скрипт
Copy-Item -Path "C:\PD\Asd.txt" -Destination "C:\FilesDmp"

Как добавить туда условие "if", если файл с таким названием уже присутствует в C:\FilesDmp, чтобы при копировании в название нового файла добавили допустим +1?
В итоге файл должен быть таким "Asd1". Если, "Asd1" уже есть, чтобы новый файл был "Asd2".
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@FluffyBeaver
function Get-ResultFilePath {
    param (
        # Путь к файлу, который копируется
        [Parameter(Mandatory = $true)]
        [System.String]
        $SourcePath,
        # Путь к папке, в которую необходимо скопировать файл
        [Parameter(Mandatory = $true)]
        [System.String]
        $DestinationFolder
    )

    # Вариант 1
    $File = Get-Item -Path $SourcePath
    $DestinationPath = Join-Path -Path $DestinationFolder -ChildPath "$($File.BaseName)$($File.Extension)"

    $i = 1
    While (Test-Path -Path $DestinationPath) {
        $DestinationPath = Join-Path -Path $DestFolder -ChildPath ($File.BaseName, $File.Extension -join "($i)")
        $i++
    }

    # Вариант 2
    # $FileBaseName = [System.IO.Path]::GetFileNameWithoutExtension($SourcePath)
    # $FileExtension = [System.IO.Path]::GetExtension($SourcePath)
    # $DestinationPath = Join-Path -Path $DestinationFolder -ChildPath "$FileBaseName$FileExtension"

    # $i = 1
    # While (Test-Path -Path $DestinationPath) {
    #     $DestinationPath = Join-Path -Path $DestFolder -ChildPath ($FileBaseName, $FileExtension -join "($i)")
    #     $i++
    # }

    return $DestinationPath
}

$DestFolder = 'F:\tmp'
$Path = 'C:\tmp\FileName.pdf'

Copy-Item -Path $Path -Destination (Get-ResultFilePath -SourcePath $Path -DestinationFolder $DestFolder)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы