Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10

Скопировать папки, в которых файл меньше N кб

01.12.2019, 22:05. Показов 2724. Ответов 20

Студворк — интернет-сервис помощи студентам
Привет. Подскажите пожалуйста решение такой задачи:
Есть N папок, внутри каждой из них лежит ряд других файлов и папок, а так же файл с названием "cyberforum"
Нужно сделать батник, который переместит из папки A в папку B только те ПАПКИ с файлами и подкаталогами, в которых файл "cyberforum" менее 100kb.

Лучшее что у меня получилось - это копировать только сам файл, а вот остальные файлы и подкаталоги не знаю как сделать.
Мой пример

Windows Batch file
1
2
3
set "a=C:\from"
set "b=D:\to"
robocopy "%a%" "%b%" /move /e /xd /max:70000 /ia:rashcneto
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2019, 22:05
Ответы с готовыми решениями:

Скопировать из папки A в папку B файлы, которых нет в B
Скопировать из папки A в папку B файлы, которых нет в B , нужен JS

Скопировать из папки A в папку В файлы, которых нет в В
Дорогие форумчане, нужна ваша помощь в написании несложных бат файлов 3)Скопировать из папки A в папку B файлы, которых нет в B

Скопировать из папки A в папку B файлы, которых нет в B
Скопировать из папки A в папку B файлы, которых нет в B

20
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
01.12.2019, 23:50
Лучший ответ Сообщение было отмечено specxml как решение

Решение

Windows Batch file
1
2
3
4
@echo off
for /d %%d in (C:\from\*) do call :fcopy "%%d\cyberforum" "%%d"
:fcopy
if exist %1 if 102400 gtr %~z1 xcopy /cehkqry %2 "D:\to\%~n2\" 2>nul>1>nul
2
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
02.12.2019, 09:31  [ТС]
Спасибо.

Но что-то у меня не получилось превратить это в рабочий батник..
Совсем никак, и ошибку найти не могу.
0
 Аватар для volodin661
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
02.12.2019, 11:14
PowerShell
1
gci c:\A\* -filter cyberforum -rec -file |? { $_.Length -lt 100Kb } |% { $_.Directory} |% { Copy-Item $_ -Recurse -Destination c:\B -Force }
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
02.12.2019, 14:47
Цитата Сообщение от specxml Посмотреть сообщение
Но что-то у меня не получилось превратить это в рабочий батник..
Код рабочий. Вы пути верно прописали? cyberforum без раширения?
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
02.12.2019, 15:05  [ТС]
Да, разумеется. Файл без расширения (тестировал и с расширением). Мой код под спойлером.

Кликните здесь для просмотра всего текста
@echo off
for /d %%d in (C:\from\*) do call :fcopy "%%d\cyberforum" "%%d"
:fcopy
if exist %1 if 102400 gtr %~z1 xcopy /cehkqry %2 "D:\to\%~n2" 2>nul>1>nul
pause



Структура исходного каталога выглядит примерно так:
Кликните здесь для просмотра всего текста
c:\from\1\124124.rar
c:\from\1\2\124124.rar
c:\from\1\4\124124.rar
c:\from\1\cyberforum

c:\from\2\rasr12.exe
c:\from\2\21sfa2\rasr12.exe
c:\from\2\agfaf\rasr12.exe
c:\from\2\cyberforum

c:\from\3\124124.jpg
c:\from\3\fsar2\124124.jpg
c:\from\3\cyberforum
c:\from\3\12s2fs\124124.jpg
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
02.12.2019, 15:15
del
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
02.12.2019, 16:14
specxml, так это уже новые условия. Глубина идёт ещё на уровень дальше. И теперь неясно, какие в итоге папки должны быть сверху в получателе?

P.S.: Не прячьте больше эту мелочёвку под спойлеры, а то мне каждый раз нужно другой браузер открывать, чтобы раскрыть их.
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
02.12.2019, 16:33  [ТС]
FlasherX,
Цитата Сообщение от FlasherX Посмотреть сообщение
так это уже новые условия
Да нет, не новые в стартпосте я подчеркнул специально слова: те ПАПКИ с файлами и подкаталогами

Цитата Сообщение от FlasherX Посмотреть сообщение
И теперь неясно, какие в итоге папки должны быть сверху в получателе?
Давайте попробую на примере пояснить что я имею в виду. Например имеем два каталога в c:\from\ (к слову в реальности их тысячи)

c:\from\1\124124.rar - 25mb
c:\from\1\2\124124.rar - 15mb
c:\from\1\4\124124.rar - 3mb
c:\from\1\cyberforum - 2mb

c:\from\2\rasr12.exe - 10mb
c:\from\2\21sfa2\rasr12.exe - 7mb
c:\from\2\agfaf\rasr12.exe - 3mb
c:\from\2\cyberforum - 5kb


Как видите в каждом каталоге (from\1\ и from\2\) есть ряд других подкаталогов и файлов.
Нам нужно перенести в D:\to только те каталоги, в которых файл cyberforum =<70kb.
В примере выше, это только c:\from\2\*, сохраняя структуру (т.е. полностью саму папку "2" со всем её содержимым)
0
 Аватар для volodin661
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
02.12.2019, 16:47
specxml, дядя Volodin661 тебе же всё нарисовал. Правда, не тестировал. Но это ты уж сам.

Добавлено через 1 минуту
powershell только надо обновить до старшей версии.
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
02.12.2019, 17:31
Цитата Сообщение от specxml Посмотреть сообщение
Да нет, не новые
Поспешил с выводами. Всё верно. Код у меня работает.

P.S.: Дяде Фёдору, говорят, 9 лет было. А тут 14. ))
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
02.12.2019, 17:31  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
дядя Volodin661 тебе же всё нарисовал. Правда, не тестировал. Но это ты уж сам.
Ну там на ps. Скрипт нужен на удаленную машину, где версию PS обновить возможности нет.
Но тем не менее я проверил на своей машине, с PS версии 5.1 - выполнение этой команды не дает никакого ответа и не переносит каталоги. Т.е. ни ошибки ни результата)

Цитата Сообщение от FlasherX Посмотреть сообщение
Поспешил с выводами. Всё верно. Код у меня работает.
Спасибо!
Оказывается ошибка моя была в том, что я в конце поставил pause. В этом случае проверяется только первый каталог, и на этом сценарий становится в pause. Понять не могу почему так происходит. Подскажите?


p.s. В вашем примере копирование, мне нужно было перенос, допилил таким методом:
Code
1
if exist %1 if 102400 gtr %~z1 robocopy /move /e %2 D:\to\%~n2\ >>log.log
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
02.12.2019, 17:39
Цитата Сообщение от specxml Посмотреть сообщение
Понять не могу почему так происходит. Подскажите?
Потому что это конец процедуры, а не выходной части кода. Паузу имело бы смысл ставить перед 3 строкой. Но в этом нет смысла, так как всё скрыто.
Цитата Сообщение от specxml Посмотреть сообщение
мне нужно было перенос
Не обратил внимания. У robocopy есть своё протоколирование. См. справку к нему.
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
02.12.2019, 18:08  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Потому что это конец процедуры, а не выходной части кода. Паузу имело бы смысл ставить перед 3 строкой. Но в этом нет смысла, так как всё скрыто.
А тут прикол на в самой pause.
1. У меня и другие функции есть внутри этого батника.
2. Даже без других функций, выскакивает ошибка "недостаточно памяти для обработки команды". При этом скрипт отрабатывает корректно, но окно консоли остается висеть и само не закрывается. Если я в конце пишу exit, то в этом случае уже сценарий не выполняется (см. предыдущее сообщение, где я писал про обработку только первого каталога).
Вот дилема и не знаю как решить)

p.s. ресурсов на машине с лихвой, тем более что тестирую на 5 каталогах, поэтому такая ошибка вообще вызывает недоумение)
0
02.12.2019, 18:20

Не по теме:

specxml, это уже разговор для отдельной темы с конкретным кодом.

0
 Аватар для volodin661
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
02.12.2019, 18:41
пришлось тестировать

PowerShell
1
2
ni -ItemType Dir c:\b 
gci A\* -filter cyberforum -rec -file |? { $_.Length -lt 70Kb } |% { $_.Directory }  |% { copy-item -path $_ -Destination c:\b  -Recurse }
1
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
02.12.2019, 23:23
Цитата Сообщение от specxml Посмотреть сообщение
Если я в конце пишу exit
в данном коде это не конец всего кода а конец процедуры (подпрограммы) вызываемой из основного кода,
поэтому завершать саму процедуру надо по exit /b, а уже сам код по exit:
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
for /d %%d in (C:\from\*) do call :fcopy "%%d\cyberforum" "%%d"
:: pause
exit
 
:fcopy
 if exist %1 if 102400 gtr %~z1 xcopy /cehkqry %2 "D:\to\%~n2\" >nul 2>&1
exit /b
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
09.02.2020, 13:51  [ТС]
Дабы не создавать новую тему. Добрые знатоки, подскажите пожалуйста как сделать всё тоже самое что и требовалось в стартпосте, однако сейчас требуется не перенести папку, а просто удалить её.

Моих извилин не хватило не хватило на самостоятельную реализацию такой простой казалось бы задачи))
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
09.02.2020, 14:10
вместо
Цитата Сообщение от alpap Посмотреть сообщение
xcopy /cehkqry %2 "D:\to\%~n2"
Windows Batch file
1
rd /s /q %2
пробуйте

Добавлено через 2 минуты
Цитата Сообщение от specxml Посмотреть сообщение
удалить её
т.е. и файл соответственно, так?
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 10
09.02.2020, 14:31  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
пробуйте
К сожалению не вышло.
Вот мой код
Кликните здесь для просмотра всего текста

for /d %%d in (C:\From\*) do call :fcopy "%%d\cyberforum" "%%d"
:fcopy
if exist %1 if 2000 gtr %~z1 rd /s /q %2 2>nul>1>nul


Где то моя ошибка есть?

Цитата Сообщение от alpap Посмотреть сообщение
т.е. и файл соответственно, так?
Да, нужно удалить весь каталог вместе с файлом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2020, 14:31
Помогаю со студенческими работами здесь

Скопировать из папки A в папку B файлы, которых нет в B
Скопировать из папки A в папку B файлы, которых нет в B

Скопировать из папки A в папку B файлы, которых нет в папке B
добрый день форумчане) помогите пожалуйста) надо составить програму которая дожлжна скопировать из папки A в папку B файлы, которых нет в...

Скопировать один файл в папки
Привет Нужно решить такую проблему. Есть папка, в ней примерно 50 папок, в каждом из них по 2 папки и и. д. Есть один файл, который...

Скопировать файл в папки, отмеченные в CheckedListBox
Подскажите нубасу где ошибка. Dim sendfile As New IO.FileInfo(ListBox2.SelectedItem) For Each fileInFolder In...

Скопировать один файл во все папки
Добрый День!) Может кто сталкивался с таким вопросом: Как скопировать к примеру фаил 111.txt в 100 папок сразу. Чтобы в батнике не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru