![]() |
Перенос каталогов и файлов
Добрый день.
Друзья, необходимо выборочно перенести каталоги (и подкаталоги) и файлы в резервную папку. Список выбранных каталогов сохранён в файле dir.txt, например: Docs\!Каталог 1 Docs\Каталог 2 Docs\Каталог 3 Для выборочного переноса выполняется следующий код: Код:
@echo off Если в файле dir.txt знак ! экранировать ^, код работает только с этим каталогом. Docs\^!Каталог 1 Структура этого каталога может быть такой: Docs\!Каталог 1 Docs\!Каталог 1\Папка 1! Docs\!Каталог 1\!Папка 2 Docs\!Каталог 1\Папка !3 Docs\!Каталог 1\Папка 4 Т.е. ! знак может оказаться в любом месте в названии подкаталога и/или файлов. Каким образом экранировать ! знак в подкаталогах и файлах этой папки? Может у кого есть другое решение по переносу заданных списком каталогов со всеми файлами? |
Цитата:
Зачем Вы используете здесь: Цитата:
|
RealDT,
Цитата:
Код:
@Echo Off Цитата:
|
Спасибо за отклики.
По порядку: Цитата:
это Код:
if exist !folder_from! rd !folder_from! | echo !folder_from! эта команда Код:
move /Y !folder_from!\"%%I" %1 !folder_where! Цитата:
Вот код, который переносит (не копирует) один заданный каталог и обрабатывает также каталоги/файлы с восклицательными знаками: Код:
set curdisk=%~d0 Цитата:
Перенести избранные каталоги с их содержанием (подкаталоги и файлы) в резервную папку на текущем диске. Название диска не известно. |
RealDT,
Цитата:
Проделайте robocopy /? >c:\robocopy.txt и читайте описание команды в файле c:\robocopy.txt У меня ощущение, что Вы не проанализировали результат выполнения моего кода. Либо не точно его повторили, без всех ключей. Он полностью решает поставленную задачу, в том числе и чтение папок из списка в файле |
Код проверял в двух вариантах:
- на небольших файлах, которых много (код отлично справился за неск секунд) и - на файлах > 1.5 ГБ - robocopy их начинает копировать, на экране светится прогресс копирования, после некоторого ожидания на середине одного из файлов - прервал работу кода... |
RealDT, у меня нет большого опыта с RoboCopy, озвученные проблемы мне кажутся странными.
Тогда вот вариант для любого уровня вложенности подпапок на основе Move
Код:
@Echo Off |
Спасибо за варианты решения.
Вот ещё один вариант решения: Код:
@echo off Каталог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. |
RealDT, только имейте в виду, что curdisk — не текущий диск, а диск, на котором находится пакетный файл.
|
Время: 08:43. |
Время: 08:43.
© OSzone.net 2001-