PowerShell - копирование с добавлением копии

Ответить
Аватара пользователя
tosina

PowerShell - копирование с добавлением копии

Сообщение tosina »

Здравствуйте увидел что вы помогали людям в создании скриптов для копирования без замены файлов, не могли бы вы помочь в еще одном таком же?

нужно чтоб с рабочего стола копировал (желательно перемещал) все файлы и папки на диск T:\ кроме *.ini *.lnk и если на диски T:\ уже имеются файлы или папки с таким-же именем то создавал их копии последовательно (файл.txt не заменял а делал файл_1.txt, файл_2.txt и так далее) спасибо.
Аватара пользователя
corbis

Re: PowerShell - копирование с добавлением копии

Сообщение corbis »

Код:

Код: Выделить всё

$dest = "T:\"
$files = Get-ChildItem -Path "$env:USERPROFILE\Desktop\" -Exclude *.ini, *.lnk
    if ($files -ne $null) {
        foreach ($file in $files) {
         $f = $file.Name
         if (Test-Path (Join-Path $dest $file.Name)) {
            $n = 0
            while ((Test-Path (Join-Path $dest $f)) -eq $true)
            {
            $f = $file.BaseName + "_" + ++$n + $file.Extension
            }
            }
         Move-Item $file.FullName (Join-Path $dest $f)
    }
}
Аватара пользователя
Georgio

Re: PowerShell - копирование с добавлением копии

Сообщение Georgio »

Пару-тройку интересных "трюков" в свой код "впихнул":







Код:

Код: Выделить всё

$source=[System.Environment]::GetFolderPath('Desktop')
$destination='T:'
$exclude=@('*.ini','*.lnk')
if(!(Test-Path -LiteralPath ($x=Join-Path $destination $Null) -PathType Container)){
 """$destination"" is not found."
 $Host.UI.RawUI.ReadKey()|Out-Null}
else{
 gci $source -Exclude $exclude -Force|%{
  if(!(Test-Path -LiteralPath ($y="$x$($_.Name)"))){}
  else{
   for($i=1;;$i++){
    if(!(Test-Path -LiteralPath ($y="$x$($_.BaseName)_$i$($_.Extension)"))){Break}
   }
  }
  mi $_.FullName $y
 }
}



.
Аватара пользователя
tosina

Re: PowerShell - копирование с добавлением копии

Сообщение tosina »

Цитата:



Пару-тройку интересных "трюков" в свой код "впихнул":



Подскажите пожалуйста какие именно новые трюки вы добавили, чтоб знать что использовать.

Спасибо
Аватара пользователя
tosina

Re: PowerShell - копирование с добавлением копии

Сообщение tosina »

Цитата tosina:



новые трюки
PowerShell - копирование с добавлением копии






Я не писал "новые" (хотя новизна всегда относительна) и слово "трюки" писал в кавычках (вот для языка пакетных файлов можно б было писать и без кавычек, -- там ни один серьёзный код без них не обходитсяИзображение).








Цитата Georgio:





Код:

Код: Выделить всё

$x=Join-Path $destination $Null

PowerShell - копирование с добавлением копии






Поскольку в качестве значения переменной "destination" может быть указана директория как с закрывающим обратным слешем, так и без него, то данный код унифицирует это значение для дальнейшего использования только со слешем. Кстати, только сейчас обратил внимание, что при наличии слеша можно было не писать
Цитата Georgio:





Код:

Код: Выделить всё

-PathType Container

PowerShell - копирование с добавлением копии




.








Цитата Georgio:





Код:

Код: Выделить всё

if(!(Test-Path -LiteralPath ($y="$x$($_.Name)"))){}

PowerShell - копирование с добавлением копии






Казалось бы, что это при выполнении условие ничего не происходит, так как в фигурных скобках ничего нет, но тем не менее переменной присваивается значение в самом условии, которое затем может быть изменено, если это условик окажется ложным, причём аналогичным способом:
Цитата Georgio:





Код:

Код: Выделить всё

if(!(Test-Path -LiteralPath ($y="$x$($_.BaseName)_$i$($_.Extension)"))){Break}

PowerShell - копирование с добавлением копии




(поскольку кроме выхода из цикла ("Break") в фигурных скобках также ничего нет).








Цитата Georgio:





Код:

Код: Выделить всё

for($i=1;;$i++){

PowerShell - копирование с добавлением копии






Здесь используется бесконечный цикл с последующим прерыванием в случае справедливости условия.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»