Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] отказ доступа при использовании команды Move

Ответить
Настройки темы
CMD/BAT - [решено] отказ доступа при использовании команды Move

Аватара для tr011_tmn

Ветеран


Автор проектов


Сообщения: 1002
Благодарности: 295

Профиль | Отправить PM | Цитировать


Добрый день коллеги, у меня к вам такой вопрос.
Столкнулся с проблемой:
Код: Выделить весь код
set dir1=Folder
set TP1=c:\temp
set TP2=c:\temp\folder2
md %dir1%
md %TP1%
md %TP2%
на выходе получаю папку Folder в папке откуда запущен скрипт и папку folder2 в папке c:\temp
при использовании команды :
Код: Выделить весь код
MOVE /Y %TP2% %dir1%
получаю отказано в доступе
Структура папки folder2:
Код: Выделить весь код
folder2
-folder3
--folder5
-folder4
-files1
-files2
если же использовать:
Код: Выделить весь код
set dir1=Folder
set TP2=folder2
md %dir1%
md %TP2%
команда:
Код: Выделить весь код
MOVE /Y %TP2% %dir1%
срабатывает на ура.
Код: Выделить весь код
COPY /Y %TP2% %dir1%
Копирует только содержимое папки folder2 без подкаталогов находящихся в ней, что не есть гуд

-------
Насяльника!!!!! Джамшута адроннама коллайдер фключал, ключ павирнул и ашельбе машельбе асин, вульшарьбелеме!! и полный пистесама насяльника!
Цирк уехал ))) клоуны остались


Отправлено: 09:47, 06-03-2009

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата kero:
опять получаю отказано в доступе »
Отказ в доступе может быть в случае когда у папки "проблемы" с безопасностью (разрешения, владелец).

Цитата kero:
А что move не может переписывать папки? »
Команда MOVE ориентирована, в основном, на работу с файлами и не может осуществлять слияние папок и, тем более, перезапись атрибутов.
Она не может даже перемещать папки по конструкции *.* (или просто *). Конструкция *.* в случае MOVE относится только к файлам, если вместе с файлами находятся ещё и папки, то они не будут затронуты перемещением, и команда RD в моём примере не сработает ("Папка не пуста.").
Но команда MOVE может переименовывать (!) и файлы, и папки при перемещении (в отличие от команды COPY, которая не работает с папками и может переименовывать только файлы при копировании).

kero, в Вашем случае лучше использовать команду XCOPY.
Код: Выделить весь код
XCOPY /E /H /I /Y Imya_Kopiruemoy_Papki Imya_Papki_V_Kotoruyu_Kopiruyut\Imya_Kopiruemoy_Papki
RD /S /Q Imya_Kopiruemoy_Papki
или
Код: Выделить весь код
XCOPY /E /H /I /Y Imya_Kopiruemoy_Papki Imya_Papki_V_Kotoruyu_Kopiruyut\Novoe_Imya_Kopiruemoy_Papki
RD /S /Q Imya_Kopiruemoy_Papki
Команда XCOPY с данными параметрами создаст папку назначения, если её не существует, скопирует подпапки любого уровня вложенности, включая пустые, скрытые и системные, и все файлы, включая скрытые и системные, а команда RD с данными параметрами полностью удалит копируемую папку со всем содержимым, что будет равносильно перемещению (если не брать во внимание даты создания и т. п.).

А для полного совершенствования копирования нужно использовать команду ROBOCOPY. Утилита Robocopy.exe входит в комплектацию ОС Windows, начиная с Windows Vista.

Последний раз редактировалось Georgio, 18-04-2013 в 01:36. Причина: Небольшое дополнение

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:24, 18-04-2013 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Georgio:
Утилита Robocopy.exe входит в комплектацию ОС Windows, начиная с Windows Vista. »
А до того — в комплекты соответствующих Resource Kit'ов.

Отправлено: 02:45, 18-04-2013 | #12


Пользователь


Сообщения: 129
Благодарности: 0

Профиль | Отправить PM | Цитировать


Georgio, спс за ответы.

Цитата Georgio:
Отказ в доступе может быть в случае когда у папки "проблемы" с безопасностью »
нет это исключается специально для теста создал папки.

А напишите какой нибудь пример ROBOCOPY с перемещением папки "АА1" и перезаписью ею существующей папки "ВВ1" (все они конечно с файлами) одной строкой.

Последний раз редактировалось kero, 18-04-2013 в 16:45.


Отправлено: 16:35, 18-04-2013 | #13


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата kero:
А напишите какой нибудь пример ROBOCOPY с перемещением папки "АА1" и перезаписью ею существующей папки "ВВ1" (все они конечно с файлами) одной строкой. »





Примеры простого использования утилиты Robocopy.




Пример 1.



Код: Выделить весь код
ROBOCOPY AA1 BB1 /Z /TIMFIX /DCOPY:T /MIR /SL /XJ /R:4 /W:15

Параметры:

/Z - копирование с возобновлением (старый файл будет заменятся новым, если у него другое содержимое и другая дата изменения)

/TIMFIX - исправление атрибутов времени для файлов (в дополнение к /Z переписывается и дата создания для одинаковых файлов)

/DCOPY:T - копирование меток времени для папок (дата создания, дата изменения)

/MIR - зеркальное копирование (копируются все вложенные папки, включая пустые, и удаляются все файлы и папки назначения, которых не существует в источнике)

/SL - копирование самих символических ссылок вместо копирования целевого объекта этих ссылок (на всякий случай, если таковые попадутся, чтобы не скопировать лишние гигабайты)

/XJ - исключение из копирования точек соединения (также на всякиЙ случай - от них потом сложно избавлятся)

/R:n - число повторных попыток для неудавшихся копий (по умолчанию - 1 миллион)

/W:n - время ожидания между повторными попытками (по умолчанию - 30 секунд)


Значения для параметров /R и /W (/R:4 /W:15) - мои личные, можно менять, но в пределах разумного. Объясняю. Если не выставлять эти параметры совсем, то по умолчанию 30 секунд x 1 000 000 = 30 000 000 секунд; натыкается процесс копирования на "файл, занятый другим процессом" и висит, пытаясь безрезультатно его скопировать в течении почти года (30 000 000 секунд = 347 суток!). С другой стороны, если выставить /R:0 /W:0, то если случится какой-нибудь системный или аппаратный сбой, он может вызвать ошибку копирования; например, захотел прилечь на диване вместе с ноутбуком, стал переносить его со стола, - отвалился внешний жёсткий диск, с которого или на который копируется. Большинство программ в таких случаях прекращают работу или виснут, а Robocopy с парамерами ожидания и повтора подождёт, пока вставится и запустится диск, и продолжит работу, исправив ошибку (минуты обычно хватает - 15 секунд x 4).




Пример 2.



Код: Выделить весь код
ROBOCOPY AA1 BB1 /ZB /TIMFIX /DCOPY:T /MIR /SL /XJ /R:4 /W:15

Отличается от предыдущего одной буквой - параметр /ZB вместо /Z, но отличие существенное. С параметром /ZB также идёт копирование с возобновлением, но если доступ запрещен, используется режим архивации. Например, завёлся в папке System Volume Information вирус (в Windows XP это часто), антивирус его видит, а вытащить не может, - атрибуты безопасноти папки не позволяют, оценить угрозу надо, а "взламывать" папку (добавлять, менять разрешения доступа) в случае ложной угрозы как то не с руки. Используя команду с данными параметрами (можно, конечно, без /SL /XJ) делаем копию этой папки, но без атрибутов безопасности, и вирус можно отправлять на VirusTotal.




Пример 3.



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


Код: Выделить весь код
ROBOCOPY AA1 BB1 /E /ZB /DCOPY:T /TIMFIX /SL /XJ /R:4 /W:15



Пример 4.



С добавлением параметра /MOV к остальным параметрам файлы будут перемещаться (копироваться и удаляться из источника), а папки оставаться на месте; если же добавить параметр /MOVE, то файлы будут перемещаться вместе с папками.


Код: Выделить весь код
ROBOCOPY AA1 BB1 /ZB /DCOPY:T /TIMFIX /MIR /SL /XJ /MOV /R:4 /W:15

ROBOCOPY AA1 BB1 /ZB /DCOPY:T /TIMFIX /MIR /SL /XJ /MOVE /R:4 /W:15



Пример 5.



А с этими параметрами на выходе будет полная зеркальная копия (репликация) со всеми атрибутами, включая атрибуты безопасности (разрешения, владелец, аудит), но "файлы, занятые другим процессом" будут скопированы с нулевой длиной, то есть окажутся пустыми.


Код: Выделить весь код
ROBOCOPY AA1 BB1 /ZB /COPYALL /DCOPY:T /SECFIX /TIMFIX /MIR /SL /R:4 /W:15



***

Если описал десять процентов от возможностей утилиты Robocopy, то хорошо. А она может всё (или почти всё). Может копировать только выбранные атрибуты, не копируя сам файл, может исключать заданные файлы и папки (в т. ч. по маске) из копирования, может вести журнал...
Думаю, что понятно, что вместо папок "AA1" и "BB1" надо вписывать их полные имена (в случае пробелов - в кавычках), если, конечно, BAT-файл не находится в одной директории с обеими папками. Параметры можно расставлять в любом порядке вслед за папками.

Последний раз редактировалось Georgio, 19-04-2013 в 08:37. Причина: Исправление опечатки

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:12, 19-04-2013 | #14


Аватара для mariolast

Ветеран


Сообщения: 717
Благодарности: 80

Профиль | Отправить PM | Цитировать


Похожая тема, как мне надо.
Суть вопроса в том,чтобы выполнить именно перемещение содержимого одной папки в другую. Подобно Ctrl-X Ctrl-V с подтверждением замены, в этом случае содержимое переносится мгновенно практически.
Использование ROBOCOPY делает простое копирование а не перемещение и это занимает минут 10 в моей задаче, что есть слишком долго.
Move может перемещать так как надо только файлы, с каталогами проблема, если есть совпадающие, получаем Отказано в доступе.
Может есть доступное решение?

Отправлено: 22:32, 07-08-2017 | #15


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


mariolast,
Код: Выделить весь код
@Echo Off

Set "BoxIn=Z:\Soft_In
Set "DirIn=JS_Host"
Set "BoxOut=Z:\Soft_Arc"

xcopy /T /E /I /Y "%BoxIn%\%DirIn%" "%BoxOut%\%DirIn%"

FOR /F "usebackq delims=" %%i IN (`xcopy /E /Y /I /L /F "%BoxIn%\%DirIn%\*.*" "%BoxOut%\%DirIn%"`) DO Call :AllMove "%%i"
For /F "usebackq delims=" %%i In (`Dir "%BoxIn%\%DirIn%\*.*" /B /S /A:D 2^>nul^|Sort /R`) Do RD "%%i" 2>nul
RD "%BoxIn%\%DirIn%" 2>nul

GoTo :Eof

:AllMove
	Set Twin=%1
	Set Twin=%Twin: -> =" "%
	Move /Y %Twin% >nul 2>&1
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 08-08-2017 в 15:26.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:07, 08-08-2017 | #16


Аватара для mariolast

Ветеран


Сообщения: 717
Благодарности: 80

Профиль | Отправить PM | Цитировать


Похожим методом пробовал через ROBOCOPY, но это идет простое копирование, что по времени сильно удлиняет процесс, в то время как перемещение делает это практически мгновенно

Отправлено: 19:07, 08-08-2017 | #17


Старожил


Сообщения: 160
Благодарности: 26

Профиль | Отправить PM | Цитировать


mariolast, Тоже периодически сталкиваюсь с необходимостью быстро перенести папку с тяжелыми файлами из одного места в другое с заменой. Не получилось у Вас найти доступное решение?

Отправлено: 17:32, 22-07-2021 | #18


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Shulzzz, Вы пробовали моё решение? Я его порядком забыл, но там нет копирования файлов, есть копирование структуры и перенос файлов. Однако, если перенос делается на разные диски (разделы диска) - это по любому будет долго. Мигом - в рамках одного диска. Проверил - работает! За 4 года решение не прокисло!

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-07-2021 в 18:44.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:36, 22-07-2021 | #19


Старожил


Сообщения: 160
Благодарности: 26

Профиль | Отправить PM | Цитировать


megaloman, Нет, не пробовал, обязательно попробую, перенос осуществляется в рамках одного и того же раздела, интересует именно скорость, сохранение структуры папок и файлов в них, и условие, что в целевой папке файлы с одинаковыми названиями должны именно заменяться(обновляться), а не прежде удаляться и на их место записываться новые, т.е. если в переносимой папке нет определенного файла, то в целевой папке старый такой файл должен оставаться на месте

Последний раз редактировалось Shulzzz, 23-07-2021 в 09:54.


Отправлено: 00:36, 23-07-2021 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] отказ доступа при использовании команды Move

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Debian/Ubuntu - [решено] Потеря данных при использовании команды halt sgww Общий по Linux 4 02-12-2009 15:53
Распространение программ с использованием групповой политики. Ошибка: отказ доступа Zeratyl Microsoft Windows NT/2000/2003 6 30-06-2008 20:47
Доступ - Отказ доступа в папке Моя музыка bl1nk Microsoft Windows Vista 3 23-04-2008 12:53
[решено] Ошибка при использовании mysql_real_escape_string() hasherfrog Вебмастеру 7 28-11-2007 14:14
не выполняются команды в cmdlines.txt при использовании RIS koyra Автоматическая установка Windows 2000/XP/2003 3 21-06-2006 15:06




 
Переход