Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - копирование с добавлением копии

Ответить
Настройки темы
PowerShell - копирование с добавлением копии

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:51, 18-05-2015

 

Пользователь


Сообщения: 114
Благодарности: 13

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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)
    }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:41, 18-05-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


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


Код: Выделить весь код
$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
 }
}

.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:56, 19-05-2015 | #3


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 02:18, 21-05-2015 | #4


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата tosina:
новые трюки »

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



Цитата Georgio:
Код: Выделить весь код
$x=Join-Path $destination $Null
»

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



Цитата Georgio:
Код: Выделить весь код
if(!(Test-Path -LiteralPath ($y="$x$($_.Name)"))){}
»

Казалось бы, что это при выполнении условие ничего не происходит, так как в фигурных скобках ничего нет, но тем не менее переменной присваивается значение в самом условии, которое затем может быть изменено, если это условик окажется ложным, причём аналогичным способом:
Цитата Georgio:
Код: Выделить весь код
if(!(Test-Path -LiteralPath ($y="$x$($_.BaseName)_$i$($_.Extension)"))){Break}
»
(поскольку кроме выхода из цикла ("Break") в фигурных скобках также ничего нет).



Цитата Georgio:
Код: Выделить весь код
for($i=1;;$i++){
»

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

Отправлено: 11:15, 21-05-2015 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - копирование с добавлением копии

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Проблема с добавлением компьютера в домен voler Microsoft Windows NT/2000/2003 27 03-02-2013 10:16
Прочие БД - Проблема с добавлением бухгалтерии в предприятие Work700 Программирование и базы данных 3 23-07-2012 01:49
Использование - Создание копии диска Windows Xp, создание копии для резерва withsouth Лицензирование продуктов Microsoft 15 31-10-2011 03:24
проблемы с добавлением ОЗУ Kozyar Roman Ноутбуки 2 27-01-2011 14:10
Разное - Перед добавлением аддона запуск *.cmd Bolk Наборы обновлений для Windows XP/2003/Windows 7 4 12-01-2008 22:14




 
Переход