Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Сортировка файлов по папкам (http://forum.oszone.net/showthread.php?t=318696)

victor21043 12-09-2016 10:33 2667801

Сортировка файлов по папкам
 
Скриптовые языки администрирования Windows
Уважаемый пользователи портала,
-Возникла потребность распределения огромного количества файлов ,например по 80 штук,в папки(будет много папок по 80 файлов в каждой )
-Был найден скрипт,по аналогичной теме форума*, и подставлен код его в powershell 2.0(ctrl+v)
-Ничего не произошло,к сожалению(не знаю почему)
-Хочется решить проблему без сторонних программ,автоматически
-Язык-любой,который не потребует сторонних программных продуктов
Скрипт-сценарий
Код:

$source = "F:\677"
#Основная целевая папка
$target = "F:\677"
#Количество файлов для переноса в каждую папку
$n = 80

$fldrs = ((Get-ChildItem $source).Count)/$n
$i = 1
do {
md $target\$i
Get-ChildItem $source | select -First $n | move -Destination $target\$i
$i++
} while ($i -le $fldrs+1)


*Вот :
Любой язык - [решено
]Распределение файлов в каталогеhttp://forum.oszone.net/thread-259461.html

dark-------13 12-09-2016 12:16 2667849

Используй вот этот скрипт:
Код:

$Path = "d:\test\in"
$dest = "d:\test\out"


$prefix  = 0
$counter = 1
$split  = 5
$files  = Get-ChildItem $Path -Recurse -include *.txt | ? {!$_.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++
}

Перед выполнением скриптов дай две команды , Set-ExecutionPolicy RemoteSigned , и
Set-ExecutionPolicy Unrestricted и разреши выполнение скриптов на данной машине.

Укажите свой тип файлов и их количество. Копирование можно заменить на перенос move-Item

victor21043 12-09-2016 23:17 2668040

Уточнение,
1)Если я хочу запустить сортировку в одной корневой папке ,то:
можно этого не писать:
$Path = "d:\test\in"
$dest = "d:\test\out"
Можно ли так:
$source = "F:\677"
2)
Что это такое,где число n($n = 80)?
$split = 5[/i] (разделить,расщепить по 5 штук в папке?)


Время: 05:43.

Время: 05:43.
© OSzone.net 2001-