С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 03.06.2024
Сообщений: 2
1

Прошу написать мне прогу для распределения файлов из одних папок в другие

03.06.2024, 11:14. Показов 844. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, есть задача

Создать программу для копирования файлов в разные папки

Нужно распределять файлы из одних папок в другие, делая это по-очереди

Задача такая:

Допустим у нас есть 10 исходных папок
В каждой папке есть по 10 файлов
Итого 100 файлов


Из каждой папки надо по 1-му файлу переложить в новую папку.
И сделать это по-очереди, в каскадном порядке.

Например мы хотим сделать 20 папок по 5 файлов

Что делает программа:


наполняет 1-ю новую папку:
из папки 1 копирует 1-й файл в новую папку 1
из папки 2 копирует 2-й файл в новую папку 1
из папки 3 копирует 3-й файл в новую папку 1
из папки 4 копирует 4-й файл в новую папку 1
из папки 5 копирует 5-й файл в новую папку 1

наполняет 2-ю новую папку:
из папки 6 копирует 6-й файл в новую папку 2
из папки 7 копирует 7-й файл в новую папку 2
из папки 8 копирует 8-й файл в новую папку 2
из папки 9 копирует 9-й файл в новую папку 2
из папки 10 копирует 10-й файл в новую папку 2

наполняет 3-ю новую папку (тут начинается каскад):
из папки 1 копирует 2-й файл в новую папку 3
из папки 2 копирует 3-й файл в новую папку 3
из папки 3 копирует 4-й файл в новую папку 3
из папки 4 копирует 5-й файл в новую папку 3
из папки 5 копирует 6-й файл в новую папку 3

наполняет 4-ю новую папку:
из папки 6 копирует 7-й файл в новую папку 4
из папки 7 копирует 8-й файл в новую папку 4
из папки 8 копирует 9-й файл в новую папку 4
из папки 9 копирует 10-й файл в новую папку 4
из папки 10 копирует 1-й файл в новую папку 4

итд, пока не разложит все файлы

Что должно настраиваться:
1. Копировать файлы, или перемещать
2. По сколько файлов положить в каждую папку
Например, 100 файлов можно разложить:
- по 5 файлов, тогда прога создаст 20 папок
- по 6 файлов, тогда прога создаст 17 папок
- по 20 файлов, тогда прога создаст 5 папок
3. Исходная директория, из которой брать папки с файлами
4. Конечная директория, в которой создавать новые папки и туда копировать/перемещать

Прога должна работать на винде

кто может помочь - напишите в лс. Сразу со стоимостью и сроками

Если я не в тот раздел форума написал - сорян
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2024, 11:14
Ответы с готовыми решениями:

Перенос обработанного сообщения и ответа на него из одних папок в другие
Здравствуйте, Уважаемые! Столкнулся со следующей проблемой. Из общего пула входящей почтовой...

Добавить текст из одних файлов в другие файлы
Здравствуйте, я плох в cmd, но думаю что с помощью cmd это будет сделать легко, так что прошу...

Написать команды в батнике, которые бы копировали все файлы из одних папок в другую (с заменой на новые)
Добрый день! Помогите пожалуйста написать команды в батнике, которые бы копировали все файлы из...

Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
Написать программу для работы по запросам оператора с приоритетной очередью запросов. Куча...

9
3160 / 1086 / 490
Регистрация: 29.05.2016
Сообщений: 4,515
03.06.2024, 11:25 2
pa3x, каким образом нужно именовать целевые папки (папки, в которые нужно копировать/перемещать файлы) из п. 4?
0
0 / 0 / 0
Регистрация: 03.06.2024
Сообщений: 2
03.06.2024, 12:30  [ТС] 3
Цитата Сообщение от Karen87 Посмотреть сообщение
pa3x, каким образом нужно именовать целевые папки (папки, в которые нужно копировать/перемещать файлы) из п. 4?
Папки называть цифрами по порядку: 1, 2, 3...
0
3160 / 1086 / 490
Регистрация: 29.05.2016
Сообщений: 4,515
03.06.2024, 18:34 4
pa3x, пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
powershell -executionpolicy bypass -command "$operation=read-host 'Введите тип операции (copy или move)';" ^
    "while (($operation -ne 'copy') -and ($operation -ne 'move')) {$operation=read-host 'Введён неподдерживаемый тип операции. Повторите ввод (copy или move)'};" ^
    "$count=[int](read-host 'Количество файлов, которое нужно копировать\перемещать в папку (число больше 0)');" ^
    "while (($count -le 0) -or ($count -notmatch '^\d+$')) {$count=read-host 'Введено неподдерживаемое значение. Повторите ввод (число больше 0)'};" ^
    "$source=read-host 'Укажите полный путь к директории, из которой нужно копировать\перемещать файлы';" ^
    "while (!(test-path $source)) {$source=read-host 'Введен неподдерживаемый или несуществующий путь. Повторите ввод'};" ^
    "$destination=read-host 'Укажите полный путь к директории, в которой нужно создавать папки и копировать\перемещать в них файлы';" ^
    "while ($destination -notmatch '^[a-z]:\\') {$destination=read-host 'Введен неподдерживаемый путь. Повторите ввод'};" ^
    "$files=Get-ChildItem $source -file -Recurse | sort directoryname;" ^
    "$iters=[int](($files.count)/$count);" ^
    "1..$iters | foreach -begin {$end=-1} -process {" ^
        "$folder="""$($destination)\$($_)""";" ^
        "mkdir $folder;" ^
        "$start=$end+1;" ^
        "$end=$start+($count-1);" ^
        "$files[$start..$end] | foreach {" ^
            "$file=$_.fullname;" ^
            "switch ($operation) {" ^
                "'copy' {Copy-Item -path $file -Destination $folder; break};" ^
                "'move' {Move-Item -path $file -Destination $folder; break};}}}"
pause
exit
Примечание

1) Батник сохраняете в кодировке OEM-866

Добавлено через 35 минут
Мда... Сейчас понял, что задача решена неправильно...
0
3160 / 1086 / 490
Регистрация: 29.05.2016
Сообщений: 4,515
04.06.2024, 11:17 5
Цитата Сообщение от Karen87 Посмотреть сообщение
Мда... Сейчас понял, что задача решена неправильно...
Пробуйте этот вариант:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
powershell -executionpolicy bypass -command "$operation=read-host 'Введите тип операции (copy или move)';" ^
    "while (($operation -ne 'copy') -and ($operation -ne 'move')) {$operation=read-host 'Введён неподдерживаемый тип операции. Повторите ввод (copy или move)'};" ^
    "$limit=[int](read-host 'Количество файлов, которое нужно копировать\перемещать в папку (число больше 0)');" ^
    "while (($limit -le 0) -or ($limit -notmatch '^\d+$')) {$limit=read-host 'Введено неподдерживаемое значение. Повторите ввод (число больше 0)'};" ^
    "$source=read-host 'Укажите полный путь к директории, из которой нужно копировать\перемещать файлы';" ^
    "while (!(test-path $source)) {$source=read-host 'Введен неподдерживаемый или несуществующий путь. Повторите ввод'};" ^
    "$destination=read-host 'Укажите полный путь к директории, в которой нужно создавать папки и копировать\перемещать в них файлы';" ^
    "while ($destination -notmatch '^[a-z]:\\') {$destination=read-host 'Введен неподдерживаемый путь. Повторите ввод'};" ^
    "$structure=Get-ChildItem $source -file -Recurse | group DirectoryName;" ^
    "$count_files_in_folder=($structure[0].group).Count;" ^
    "$count_all_files=$structure.group.count;" ^
    "1..$count_files_in_folder | foreach -begin {$array=0..$($count_files_in_folder-1); $list_files=[System.Collections.ArrayList]::new()} -process {0..$($count_files_in_folder-1) | foreach {$list_files.Add(($structure[$($_)].group)[$array[$($_)]])>$null}; $array=$array[1..$($array.count-1)]+$array[0]};" ^
    "1..$($count_all_files/$limit) | foreach -begin {$start=0} -process {$end=$start+$limit-1; $new_folder=mkdir """$($destination)\$($_)"""; $list_files[$start..$end] | foreach {$file=$_; switch ($operation) {'copy' {Copy-Item -Path $file.fullname -Destination """$($new_folder.FullName)"""}; 'move' {Move-Item -Path $file.fullname -Destination """$($new_folder.FullName)"""}}}; $start=$end+1}"
pause
exit
0
6296 / 2137 / 337
Регистрация: 10.12.2013
Сообщений: 7,370
04.06.2024, 15:18 6
combine_files.ps1
PowerShell
1
2
3
4
param($from=$HOME, $total=10, $by=5)
(dir (join-path $from '*') -file).fullname | out-file ooo
gc  ooo -ReadCount($by) -TotalCount $total |% {$n=0} {$dest=++$n; $_ |% {copy $_ -Dest $dest -WhatIf}}
del ooo
Windows Batch file
1
powershell -f combine_files.ps1 -from somedir -total 100 -by 20
0
2099 / 673 / 286
Регистрация: 26.03.2022
Сообщений: 1,270
Записей в блоге: 1
04.06.2024, 17:10 7
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Echo Off &Cls &>nul Chcp 1251
    Set "BoxIn=Z:\Box_In"
    Set "BoxOut=Z:\Box_Out"
    Set /A nOut=5
    Set /A Lcopy=1  &rem Copy=1 Move=0
    Set "Mask=*.*"
 
    SetLocal EnableDelayedExpansion
    Set /A n1=0, nd=0, i=0
    For /D %%d In ("%BoxIn%\*.*") Do (For %%f In ("%%d\%Mask%") Do Set /A n1+=1) &GoTo :Cont
    :Cont
    For /D %%d In ("%BoxIn%\*.*") Do Set /A nd+=1 &For %%f In ("%%d\%Mask%") Do Set /A i+=1 &Set "@@f!i!=%%f"
    
    Set /A m=1,ii=0
    Set /A mm=100000+%m%
    Set "Out="%BoxOut%\%mm:~-3%"
    Md "%Out%"
    
    For /L %%i In (1,1,%n1%) Do Set /A l=-1 &For /L %%j In (1,1,%nd%) Do (
        Set /A l+=1, il=%%i+!l!
        If !il! GEQ %n1% Set /A l=1-%%i 
        Set /A k=^(%%j-1^)*!n1!+%%i+!l!
        Set /A ii+=1
        If !ii! GTR %nOut% (
            Set /A m+=1
            Set /A mm=100000+!m!
            Set "Out=%BoxOut%\!mm:~-3!"
            Md "!Out!" &Set /A ii=1
        ) 
        If %Lcopy% NEQ 0 (>nul Call Copy "%%@@f!k!%%" "!Out!\") Else (>nul Call Move "%%@@f!k!%%" "!Out!\")
    )
Exit /B
Пути пропишите свои, режим перемещения или копирования укажите нужные, кол-во файлов в новой папке указывайте нужное Вам.
0
3160 / 1086 / 490
Регистрация: 29.05.2016
Сообщений: 4,515
04.06.2024, 23:42 8
Цитата Сообщение от Karen87 Посмотреть сообщение
Пробуйте этот вариант:
Снова недочёт. Исправленный окончательный вариант:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
powershell -executionpolicy bypass -command "$operation=read-host 'Введите тип операции (copy или move)';" ^
    "while (($operation -ne 'copy') -and ($operation -ne 'move')) {$operation=read-host 'Введён неподдерживаемый тип операции. Повторите ввод (copy или move)'};" ^
    "$limit=[int](read-host 'Количество файлов, которое нужно копировать\перемещать в папку (число больше 0)');" ^
    "while (($limit -le 0) -or ($limit -notmatch '^\d+$')) {$limit=read-host 'Введено неподдерживаемое значение. Повторите ввод (число больше 0)'};" ^
    "$source=read-host 'Укажите полный путь к директории, из которой нужно копировать\перемещать файлы';" ^
    "while (!(test-path $source)) {$source=read-host 'Введен неподдерживаемый или несуществующий путь. Повторите ввод'};" ^
    "$destination=read-host 'Укажите полный путь к директории, в которой нужно создавать папки и копировать\перемещать в них файлы';" ^
    "while ($destination -notmatch '^[a-z]:\\') {$destination=read-host 'Введен неподдерживаемый путь. Повторите ввод'};" ^
    "$structure=Get-ChildItem $source -file -Recurse | group DirectoryName;" ^
    "$count_files_in_folder=($structure[0].group).Count;" ^
    "$count_all_files=$structure.group.count;" ^
    "$array=0..$($count_files_in_folder-1);" ^
    "$list_files=[System.Collections.ArrayList]::new();" ^
    "0..$($count_files_in_folder-1) | foreach {0..($structure.count-1) | foreach {$index=($_ %% $count_files_in_folder)-1; $list_files.Add(($structure[$($_)].group)[$array[$($index)]])>$null}; $array=$array[1..$($array.count-1)]+$array[0]};" ^
    "$range=$count_all_files/$limit;" ^
    "if ($range.gettype().name -eq 'double') {$end_range=([int]($range -replace ',.+$'))+1} else {$end_range=$range};" ^
    "1..$end_range | foreach -begin {$start=0} -process {$end=$start+$limit-1; $new_folder=mkdir """$($destination)\$($_)"""; $list_files[$start..$end] | foreach {$file=$_; switch ($operation) {'copy' {Copy-Item -Path $file.fullname -Destination """$($new_folder.FullName)"""}; 'move' {Move-Item -Path $file.fullname -Destination """$($new_folder.FullName)"""}}}; $start=$end+1}"
pause
exit
0
6296 / 2137 / 337
Регистрация: 10.12.2013
Сообщений: 7,370
05.06.2024, 01:56 9
combine_files.ps1
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# This script copies or move $total files from directory $from to directory $to with combining it as series by $by
# Example:
# .\combine_files.ps1 -command COPY -from \USERS\Petroff -to FOLDER{0} -total 3 -by 2
# Performing the operation "Copy File" on target "Item: /Users/petroff/myporno.jpg Destination: /Users/petroff/FOLDER1".
# Performing the operation "Copy File" on target "Item: /Users/petroff/bdsm.png Destination: /Users/petroff/FOLDER1".
# Performing the operation "Copy File" on target "Item: /Users/petroff/olivia.jpg Destination: /Users/petroff/FOLDER2".
 
param( 
        $command = "COPY",
        $from    = $HOME,
        $to      = "FOLDER{0}",
        $total   = 10,
        $by      = 5
)
 
(Dir(join-path $from *)).FullName | out-file __tmp__  # create temporary file
 
$n = 0
foreach ( $segment in Content __tmp__ -Read($by) -Total($total) ) {
 
    $dest = $to -f ++$n;
    foreach ( $filename in $segment ) {
        Invoke-Expression "$command $filename -Destination $dest -Force -WhatIf"
    }
}
 
del __tmp__  # delete tempoarary file
исполнение в сессии powershell:
PowerShell
1
.\combine_files.ps1 -command Move -from somedir -to 'FOLDER_{0}' -total 100 -by 10
исполнение в сессии cmd:
Windows Batch file
1
powershell -nop -ep bypass -f combine_files.ps1 -command Move -from somedir -to FOLDER_{0} -total 100 -by 10
0
6296 / 2137 / 337
Регистрация: 10.12.2013
Сообщений: 7,370
08.06.2024, 18:51 10
можно покультурней.
и избавиться от Invoke-Expression, це потенциально опасная операция

combine_files.ps1
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
param( 
    $oper   = "COPY",
    $from   = "$HOME/*.txt",
    $to     = "FOLDER{0}",
    $total  = 10,
    $by     = 2
)
$n = 1
foreach( $file in dir $from ) {
    
    if ( $n -gt $total ) { BREAK } 
    
    $dest = $to -f [math]::truncate(($n+++($by-1))/$by)
    
    switch( $oper ) {
          COPY
        { COPY $file -Destination $dest -whatif }
          MOVE
        { MOVE $file -Destination $dest -whatif }
    }
}
0
08.06.2024, 18:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2024, 18:51
Помогаю со студенческими работами здесь

Способы копирования файлов и папок в другие папки и носители
Срочно нужны! больше 20 способов! Пожалуйста!

Помогите написать прогу, прошу!!
Надо на VBA на экселе здлеать прогу Что б она выводила мнимый модуль..!! Добавлено через 33...

Прошу написать прогу Двухмерный массив
Написать программу, вычисляющую количество четных двумерного массива 3х3 и дописывающую их в этот...

Составить программу для перевода одних единиц измерения в другие
Организовать в программе перевод одних единиц измерения в другие,по выбору пользователем...

Абрамов № 61, 85, 334(а), 374, 67(б,а). Прошу помочь, мне нужны эти задания для зачета прошу помощи.
Прошу помощи, скачайте файл Абрамов (пожалуйста), номер 61, 85, 334(а), 374, 67(а,б). Помочите чем...

Нужно прогу сделать для текстовых файлов и для типизированных файлов.Само задание ниже
Дан файл целых чисел,не равных нулю.Числа в файле идут в следующем порядке:10 положительных,10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru