![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Помогите допилить скрипт сортировки файлов - по Количеству указанному в ($split) |
|
|
PowerShell - Помогите допилить скрипт сортировки файлов - по Количеству указанному в ($split)
|
Старожил Сообщения: 169 |
Здравствуйте,
Подскажите пожалуйста, как допилить этот скрипт, чтобы скрипт делал следующие действия: По указанному значению в переменной $split переносил бы файлы в созданную папку с номером 1, потом переходил к следующим файлам и копировал их в другую созданную папку, но уже с номером 2 и тд. пока не закончатся все файлы $Path = "e:\Test\in" $dest = "e:\Test\out" $counter = 1 $split = 2 $postfix=1 while ($counter -ne $split){ Get-ChildItem $Path -Recurse -include *.jpg, *.png, *.gif | ? {!$_.PSIsContainer} | copy-Item -Destination { $folder = "$dest\$($_.$folder,$postfix)" md $folder -Force | Out-Null $fpath = Join-Path $folder $_.Name $i = 1 while($true) { if (Test-Path $fpath) { $fpath = "{0}\{1}_{2}{3}" -f $folder,$_.basename,$i,$_.extension $i++ } else { $fpath break } } } $counter++ $postfix++ } |
|
Отправлено: 21:19, 09-10-2012 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Можете более четко объяснить задачу,т.к. условия не понятны.
|
Отправлено: 23:27, 09-10-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Есть папка с вложенными папками скажем с общим количеством 5000 фоток, нужно скопировать эти фотки в отдельные папки - например по 1000 штук в каждую папку, папки соответственно нумеруем 1,2,3,4,5
Был такой вариант на бат , но хотелось бы на powershell @echo off SETLOCAL EnableDelayedExpansion set $SRC=D:\PICS set $DST=D:\NEW for /d %%a in ("%$SRC%\*") do (set/a $n=-1 for /f "delims=" %%b in ('dir/b/s/a-d "%%a\*.jpg"2^>nul') do (set/a $n+=1 set/a $m=1+!$n!/500 if not exist "%$DST%\%%~na\!$m!" md "%$DST%\%%~na\!$m!" move/-y "%%b" "%$DST%\%%~na\!$m!\">nul )) |
Отправлено: 23:48, 09-10-2012 | #3 |
Ветеран Сообщения: 1759
|
|
Отправлено: 00:34, 10-10-2012 | #4 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать $Path = "e:\Test\in" $dest = "e:\Test\out" $prefix = 0 $counter = 1 $split = 2 $files = Get-ChildItem $Path -Recurse -include *.jpg, *.png, *.gif | ? {!$_.PSIsContainer} $fcount = $files.count $step = [math]::Floor($fcount/$split) $j = $step -1 while($prefix -lt $fcount) { if($counter -gt $split) { $counter =1 } $files[$prefix..$j] | copy-Item -Destination { $folder = "$dest\$counter" md $folder -Force | Out-Null $fpath = Join-Path $folder $_.Name $i = 1 while($true) { if (Test-Path $fpath) { $fpath = "{0}\{1}_{2}{3}" -f $folder,$_.basename,$i,$_.extension $i++ } else { $fpath break } } } $prefix = $j + 1 $j += $step $counter++ } |
|
Отправлено: 01:31, 10-10-2012 | #5 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Уважаемый Kazun спасибо что помогаете, наверное мне еще более подробно нужно было описать работу скрипта.
Скрипт работает немножко не так, как хотелось бы. Работать скрипт должен следующим образом: 1.Скрипт рекурсивно должен просматривать папку и вложенные папки на предмет указанных изображений 2.Количество картинок должно указываться в переменной $split и скрипт должен копировать картинки по 1000 штук в папку. !!! Каждая новая папка должна создаваться автоматом (,а не по указанию количества в переменной), каждая папка должна отличаться от предыдущей на 1 !!! 3.Если при копировании имена файлов совпадают то добавляем к файлу постфикс - после имени , но перед точкой. 4.В последний каталог попадут не обязательно ровно 1000 штук.... Вам Foreigner тоже огромное спасибо за участие в исправлении скрипта, но ваш вариант скрипт пока не тестировал. |
Отправлено: 12:25, 10-10-2012 | #6 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Так $split или 1000?
|
Отправлено: 12:50, 10-10-2012 | #7 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Я должен ручками задать количество копируемых картинок в количестве 1000 , замечу что в исходной папке и подпапках общее количество у меня больше где-то около 5000 тысяч.
Если мы меняем количество картинок в папке то соответственно количество папок у нас увеличится. При количестве 1000 папок будет 5 При количестве 500 папок будет 10 На $split не смотрите, наверное она здесь не нужна вообще , да точно эта переменная не нужна. В батскрипте это количество указывается вот такой строкой, со значением 500 |
Последний раз редактировалось dark-------13, 10-10-2012 в 13:30. Отправлено: 13:23, 10-10-2012 | #8 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать $Path = "e:\Test\in" $dest = "e:\Test\out" $prefix = 0 $counter = 1 $split = 1000 $files = Get-ChildItem $Path -Recurse -include *.jpg, *.png, *.gif | ? {!$_.PSIsContainer} $fcount = $files.count $step = $split - 1 while(Test-Path "$dest\$counter") { $counter++ } while($prefix -lt $fcount) { $files[$prefix..$step] | copy-Item -Destination { $folder = "$dest\$counter" md $folder -Force | Out-Null $fpath = Join-Path $folder $_.Name $i = 1 while($true) { if (Test-Path $fpath) { $fpath = "{0}\{1}_{2}{3}" -f $folder,$_.basename,$i,$_.extension $i++ } else { $fpath break } } } $prefix = $step + 1 $step += $split $counter++ } |
Отправлено: 14:08, 10-10-2012 | #9 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Спасибо вам Kazun - все отлично работает. Теперь отсортирую фотки на своем компе. Лично от себя какую вы книжку по powershell посоветуете почитать - для человека, который не силен в программировании.
|
Отправлено: 15:02, 10-10-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Помогите допилить скрипт сортирующий изображения | dark-------13 | Скриптовые языки администрирования Windows | 2 | 09-10-2012 10:16 | |
VBS/WSH/JS - Помогите допилить скрипт*(create subfolders ) | datosha | Программирование и базы данных | 6 | 09-04-2012 16:46 | |
CMD/BAT - Не работает скрипт сортировки файлов по папкам | dark-------13 | Скриптовые языки администрирования Windows | 0 | 27-01-2012 23:11 | |
Любой язык - Скрипт сортировки почты | Donner | Скриптовые языки администрирования Windows | 0 | 10-11-2011 08:06 | |
CMD/BAT - [решено] Скрипт сортировки и копирования файлов по маске | Daemonstar | Скриптовые языки администрирования Windows | 2 | 25-09-2010 15:47 |
|