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

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

Ответить
Настройки темы
PowerShell - Помогите допилить скрипт сортировки файлов - по Количеству указанному в ($split)

Старожил


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

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


Здравствуйте,


Подскажите пожалуйста, как допилить этот скрипт, чтобы скрипт делал следующие действия:
По указанному значению в переменной $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
Благодарности: 861

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


Можете более четко объяснить задачу,т.к. условия не понятны.

Отправлено: 23:27, 09-10-2012 | #2



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

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


Старожил


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

Профиль | Отправить 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
Благодарности: 966

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


dark-------13, Если правильно понял
Код: Выделить весь код
$split = 5
$folder = 1

$files = gci *.png, *.jpg

for ( $i = 0; $i -le $files.count; $i += $split ) {

    ni -t dir $folder 
    
    $i..($split+$i-1) | % { 
    
        if ($files[$_]) { move-item $files[$_] $folder } 
        
    } 
    
    $folder++

}

Отправлено: 00:34, 10-10-2012 | #4


Ветеран


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

Профиль | Отправить 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
Благодарности: 4

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


Уважаемый Kazun спасибо что помогаете, наверное мне еще более подробно нужно было описать работу скрипта.
Скрипт работает немножко не так, как хотелось бы.

Работать скрипт должен следующим образом:
1.Скрипт рекурсивно должен просматривать папку и вложенные папки на предмет указанных изображений
2.Количество картинок должно указываться в переменной $split и скрипт должен копировать картинки по 1000 штук в папку.
!!! Каждая новая папка должна создаваться автоматом (,а не по указанию количества в переменной), каждая папка должна отличаться от предыдущей на 1 !!!

3.Если при копировании имена файлов совпадают то добавляем к файлу постфикс - после имени , но перед точкой.
4.В последний каталог попадут не обязательно ровно 1000 штук....

Вам Foreigner тоже огромное спасибо за участие в исправлении скрипта, но ваш вариант скрипт пока не тестировал.

Отправлено: 12:25, 10-10-2012 | #6


Ветеран


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

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


Так $split или 1000?

Отправлено: 12:50, 10-10-2012 | #7


Старожил


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

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


Я должен ручками задать количество копируемых картинок в количестве 1000 , замечу что в исходной папке и подпапках общее количество у меня больше где-то около 5000 тысяч.
Если мы меняем количество картинок в папке то соответственно количество папок у нас увеличится.

При количестве 1000 папок будет 5
При количестве 500 папок будет 10

На $split не смотрите, наверное она здесь не нужна вообще , да точно эта переменная не нужна.

В батскрипте это количество указывается вот такой строкой, со значением 500
Код: Выделить весь код
set/a $m=1+!$n!/500

Последний раз редактировалось dark-------13, 10-10-2012 в 13:30.


Отправлено: 13:23, 10-10-2012 | #8


Ветеран


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

Профиль | Отправить 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
Благодарности: 4

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


Спасибо вам Kazun - все отлично работает. Теперь отсортирую фотки на своем компе. Лично от себя какую вы книжку по powershell посоветуете почитать - для человека, который не силен в программировании.

Отправлено: 15:02, 10-10-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход