Здравствуйте увидел что вы помогали людям в создании скриптов для копирования без замены файлов, не могли бы вы помочь в еще одном таком же?
нужно чтоб с рабочего стола копировал (желательно перемещал) все файлы и папки на диск T:\ кроме *.ini *.lnk и если на диски T:\ уже имеются файлы или папки с таким-же именем то создавал их копии последовательно (файл.txt не заменял а делал файл_1.txt, файл_2.txt и так далее) спасибо.
PowerShell - копирование с добавлением копии
-
corbis
Re: PowerShell - копирование с добавлением копии
Код:
Код: Выделить всё
$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 - копирование с добавлением копии
Пару-тройку интересных "трюков" в свой код "впихнул":
Код:
.
Код:
Код: Выделить всё
$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
Re: PowerShell - копирование с добавлением копии
Цитата tosina:
новые трюки
Я не писал "новые" (хотя новизна всегда относительна) и слово "трюки" писал в кавычках (вот для языка пакетных файлов можно б было писать и без кавычек, -- там ни один серьёзный код без них не обходится
).
Цитата Georgio:
Код:
Поскольку в качестве значения переменной "destination" может быть указана директория как с закрывающим обратным слешем, так и без него, то данный код унифицирует это значение для дальнейшего использования только со слешем. Кстати, только сейчас обратил внимание, что при наличии слеша можно было не писать
Цитата Georgio:
Код:
.
Цитата Georgio:
Код:
Казалось бы, что это при выполнении условие ничего не происходит, так как в фигурных скобках ничего нет, но тем не менее переменной присваивается значение в самом условии, которое затем может быть изменено, если это условик окажется ложным, причём аналогичным способом:
Цитата Georgio:
Код:
(поскольку кроме выхода из цикла ("Break") в фигурных скобках также ничего нет).
Цитата Georgio:
Код:
Здесь используется бесконечный цикл с последующим прерыванием в случае справедливости условия.
новые трюки
PowerShell - копирование с добавлением копии
Я не писал "новые" (хотя новизна всегда относительна) и слово "трюки" писал в кавычках (вот для языка пакетных файлов можно б было писать и без кавычек, -- там ни один серьёзный код без них не обходится
).Цитата Georgio:
Код:
Код: Выделить всё
$x=Join-Path $destination $NullPowerShell - копирование с добавлением копии
Поскольку в качестве значения переменной "destination" может быть указана директория как с закрывающим обратным слешем, так и без него, то данный код унифицирует это значение для дальнейшего использования только со слешем. Кстати, только сейчас обратил внимание, что при наличии слеша можно было не писать
Цитата Georgio:
Код:
Код: Выделить всё
-PathType ContainerPowerShell - копирование с добавлением копии
.
Цитата 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 - копирование с добавлением копии
Здесь используется бесконечный цикл с последующим прерыванием в случае справедливости условия.