|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
||||||
Перенос каталогов и файлов19.12.2018, 13:44. Показов 3367. Ответов 18
Метки нет (Все метки)
Добрый день.
Друзья, необходимо выборочно перенести каталоги (и подкаталоги) и файлы в резервную папку. Список выбранных каталогов сохранён в файле dir.txt, например: Docs\!Каталог 1 Docs\Каталог 2 Docs\Каталог 3 Для выборочного переноса выполняется следующий код:
Если в файле dir.txt знак ! экранировать ^, код работает только с этим каталогом. Docs\^!Каталог 1 Структура этого каталога может быть такой: Docs\!Каталог 1 Docs\!Каталог 1\Папка 1! Docs\!Каталог 1\!Папка 2 Docs\!Каталог 1\Папка !3 Docs\!Каталог 1\Папка 4 Т.е. ! знак может оказаться в любом месте в названии подкаталога и/или файлов. Каким образом экранировать ! знак в подкаталогах и файлах этой папки?
0
|
||||||
| 19.12.2018, 13:44 | |
|
Ответы с готовыми решениями:
18
Перенос файлов по расширению (более 500), сохраняя структуру каталогов Архивирование определённых файлов из разных каталогов с сохранением структуры этих каталогов
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
||||||
| 19.12.2018, 14:06 | ||||||
|
два ^^
Добавлено через 2 минуты вообще странно как код еще работает, стр14 и 16 по идее должны его положить. Добавлено через 7 минут а если в кавычках будет, то так:
но я бы делал это все без setlocal enabledelayedexpansion и таких проблем бы не было
0
|
||||||
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
|
| 19.12.2018, 15:19 [ТС] | |
|
Не разобрался с двумя ^^.
Где их нужно указать в коде? А перед ! знаком в файле со списком каталогов dir.txt оставить одну ^? Docs\^!Каталог 1 Docs\Каталог 2 Docs\Каталог 3 Не подскажете как выборочный перенос каталогов с файлами может выглядеть без setlocal enabledelayedexpansion? И де лучше хранить выборочный список каталогов: в батнике или отдельном файле?
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|
| 19.12.2018, 15:43 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
|
| 19.12.2018, 16:00 [ТС] | |
|
Спасибо. Конечно же не нужно этого делать.
Может у кого есть чем поделиться по теме вопроса или похожими решениями (в т.ч. ссылки на форуме)? Как организовать перенос файлов и каталогов с ! знаками в их названиях?
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
||||||
| 20.12.2018, 00:00 | ||||||
|
dir.txt
Кликните здесь для просмотра всего текста
Docs\!Каталог 1 Docs\Каталог 2 Docs\Каталог 3 Каталог "Docs" Кликните здесь для просмотра всего текста
Структура папок C:\DOCS ├───!Каталог 1 │ │ file 11.txt │ │ │ ├───!Папка 2 │ │ file 222.txt │ │ │ ├───Папка !3 │ │ file 333.txt │ │ │ ├───Папка 1! │ │ file 111.txt │ │ │ └───Папка 4 │ file 444.txt │ ├───Каталог 2 │ │ ff 22.txt │ │ │ ├───!Папка 22 │ │ ff 222.txt │ │ │ └───Папка !23 │ ff 333.txt │ └───Каталог 3 │ fn 33.txt │ ├───!Папка !35 │ fn 333.txt │ └───Папка 33! fn 334.txt код
Кликните здесь для просмотра всего текста
Структура папок C:\REZERV └───Docs ├───!Каталог 1 │ │ file 11.txt │ │ │ ├───!Папка 2 │ │ file 222.txt │ │ │ ├───Папка !3 │ │ file 333.txt │ │ │ ├───Папка 1! │ │ file 111.txt │ │ │ └───Папка 4 │ file 444.txt │ ├───Каталог 2 │ │ ff 22.txt │ │ │ ├───!Папка 22 │ │ ff 222.txt │ │ │ └───Папка !23 │ ff 333.txt │ └───Каталог 3 │ fn 33.txt │ ├───!Папка !35 │ fn 333.txt │ └───Папка 33! fn 334.txt
1
|
||||||
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
|
| 20.12.2018, 17:33 [ТС] | |
|
Ок. Предложенный вариант обрабатывает каталоги и файлы с "!" восклицательными знаками, но не решает основную задачу - поскольку:
- только копирует (не переносит) файлы и каталоги; - обрабатывает каталоги и файлы только из места расположения батника; - список каталогов, указанных в файле dir.txt не используется для выборочной обработки. Уточню необходимый результат: 1. В файле dir.txt размещается выборочный список каталогов, которые нужно перенести в резервную папку (Reserv). 2. Батник переносит (не копирует) каталоги из списка каталогов (dir.txt) в резервную папку (Reserv). 3. Батник может обработать восклицательные знаки, которые могут содержаться в именах каталогов и файлов (не исключает/стирает их из имён). Мой вариант выполняет условие 1. и 2., но не обрабатывает каталоги, в названии которых имеются восклицательные знаки. Может у кого-то ещё есть похожие решения? Буду признателен вариантам доработки исходного кода с учётом возможности п. 3.
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|||
| 20.12.2018, 22:31 | |||
|
Это дебильное указание пути для переноса уже имеющихся где-то файлов, почему не указывается полный путь, с диском? дальше разбирайтесь самостоятельно, более не смею вас беспокоить, успехов.
0
|
|||
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
||||||
| 21.12.2018, 10:53 [ТС] | ||||||
|
Ок. Как этот ответ (с особым акцентом на лень, религию, дебильный каталог и т.п.) способствует решению задачи? Вероятно, что эти перечисленные свои особенности, вам и не позволяют найти решение...
Вот код, который переносит (не копирует) один заданный каталог и обрабатывает также каталоги/файлы с восклицательными знаками:
Каталог в переменной dir1 указывается без диска, поскольку диск с батником является съёмным и на другом компе будет с другим именем, а команда move (а не copy & rd) на физическом уровне работает в разы быстрее, поскольку работает только в секторах HDD, где размещены ссылки на содержание файлов, а не данные этих файлов. Другими словами - copy резервирует и создаёт на диске новый блок данных, а move - только меняет ссылки на расположение этих данных. Скорость работы move и copy хорошо видна на больших файлах и незаметна если файлов много, но они небольшого размера. alpap, поддержу вас - просьба более не беспокоить своими советами...
0
|
||||||
|
6981 / 2873 / 1104
Регистрация: 06.06.2017
Сообщений: 9,752
|
||||||
| 21.12.2018, 12:18 | ||||||
1
|
||||||
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
|
| 21.12.2018, 12:47 [ТС] | |
|
Спасибо, код с robocopy работает, но есть значительные потери по времени из-за описанных причин выше.
Повторюсь: если move только переносит файлы, то robocopy их копирует с последующим удалением. Команда move (а не copy & rd или robocopy) на физическом уровне работает в разы быстрее, поскольку работает только в секторах HDD, где размещены ссылки на содержание файлов, а не данные этих файлов. Другими словами - copy/robocopy резервирует и создаёт на диске новый блок данных, а move - только меняет ссылки на расположение этих данных. Скорость работы move и copy/robocopy хорошо видна на больших файлах и незаметна если файлов много, но они небольшого размера.
0
|
|
|
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|
| 21.12.2018, 13:05 | |
|
0
|
|
|
6981 / 2873 / 1104
Регистрация: 06.06.2017
Сообщений: 9,752
|
|
| 21.12.2018, 14:40 | |
|
RealDT, про этот косяк robocopy знаю, некоторым заходит. Почему майкрософт до сих пор не озаботилось его исправлением, мне неясно.
На vbs-е могу быстрый способ предложить, только нужно уточнение, что в тексте Docs\ всегда спереди. Если так, то логично было бы от этой приставки в нём избавиться и подставлять её как переменную.
0
|
|
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
|
| 21.12.2018, 15:11 [ТС] | |
|
Ок. В тексте Docs\ может и не быть. Список выборочных каталогов для перемещения указываю в файле dir.txt, например, так:
Users\noname\Downloads\ Docs\МЕДИА Docs\КОНТАКТЫ Program Files\Far Manager\Plugins При этом каталог указывается без диска, поскольку диск с батником является съёмным и на другом компе может быть с другим именем.
0
|
|
|
6981 / 2873 / 1104
Регистрация: 06.06.2017
Сообщений: 9,752
|
||||||
| 21.12.2018, 16:13 | ||||||
1
|
||||||
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
||||||
| 26.12.2018, 17:03 [ТС] | ||||||
|
Спасибо за варианты решения.
Вот, на мой взгляд, оптимальное решение в формате BAT/CMD:
Каталог1\!Папка11\!Папка111\Папка1111;Каталог1\!Папка11\!Папка111 Каталог1\!Папка12\!Папка121\Папка1121;Каталог1\!Папка12\!Папка121 Каталог2\Папка12\Папка!331;Каталог2\Папка12 Каталог3\Папка13\;Каталог3 Т.е.: - в переменную %%I записывается каталог "что переносить"; - в переменную %%J записывается часть каталога "куда переносить", полный путь "куда переносить" будет таким %folder_where%\%%J Отличия от начального варианта решения: - убрал SETLOCAL enabledelayedexpansion, который удалял воскличательные знаки в именах каталогов и файлах; - убрал внешний цикл FOR (оставил только один цикл); - добавил неявную переменную %%J - изменил структуру dir.txt, в котором каждая строка формирует значения для %%I и %%J.
0
|
||||||
|
6981 / 2873 / 1104
Регистрация: 06.06.2017
Сообщений: 9,752
|
||
| 26.12.2018, 19:07 | ||
|
И разноимённость, отмечанная сейчас в dir, в ТЗ вообще не сообщалось. Это по сути новые условия.
0
|
||
|
1 / 1 / 0
Регистрация: 13.12.2018
Сообщений: 26
|
|||
| 27.12.2018, 10:47 [ТС] | |||
|
Спс. З.Ы. С powershell пока не разбирался...
0
|
|||
|
6981 / 2873 / 1104
Регистрация: 06.06.2017
Сообщений: 9,752
|
|||
| 27.12.2018, 12:39 | |||
|
1
|
|||
| 27.12.2018, 12:39 | |
|
Помогаю со студенческими работами здесь
19
Создание каталогов и файлов
Копирование файлов без каталогов Вывод списка файлов из каталогов Удаление всех файлов и каталогов по списку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|