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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Аватара для Hollou

Новый участник


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

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


Изменения
Автор: Hollou
Дата: 24-02-2012
Добрый день.
Нужно скопировать содержимое каталога (Папка0) за исключением одной папки (из-за её большого веса), при этом каждая новая копия этого каталога должна переименовываться (Папка1-Папка2-ПапкаN, всего 29 копий) и создать для копий основного каталога символическую ссылку на исключенную из копирования папку (название не меняется), находящуюся в оригинальном каталоге (Папка0).

Можно, конечно, собрать все расширения и названия папок, имеющихся в каталоге, и использовать множество повторяющихся команд, но должно быть более элегантное решение.

И ещё в вдогонку: нужно скопировать каталог (Папка0) с переименованием каждой новой копии (Папка1-Папка2-ПапкаN, всего 29 копий).

Помогите, пожалуйста, реализовать это любым работающим способом.

Отправлено: 06:35, 24-02-2012

 

Аватара для Hollou

Новый участник


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

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


Цитата Iska:
Попробуйте так: »
Скопировало успешно, но символьная ссылка для копий на папку Parameters не создалась. Папка Parameters лежит в Folder0 и ссылка на неё нужна для всех копий. Ругается на неправильный синтакс команды mklink, ошибок команды копирования нет.
Вроде должно быть так (для коппи папки)
cd C:\Catalog\FolderN
mklink /d Parameters "C:\Ctalog\Folder0\Parameters"

Последний раз редактировалось Hollou, 24-02-2012 в 10:15.


Отправлено: 09:43, 24-02-2012 | #11



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

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


Ветеран


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

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


Hollou, я в любом случае не смогу проверить работу оригинальной утилиты «mklink.exe» по той простой причине, что у меня Windows XP (то есть — создать Symbolic Link я могу, могу посмотреть, куда она указывает, а вот воспользоваться ею возможности нет). Синтаксис утилиты я брал отсюда: Mklink и отсюда: NTFS symbolic link - Wikipedia, the free encyclopedia.

Вот полученный мною результат:
читать дальше »
Код: Выделить весь код
╔═════════════════════════ C:\Catalog ═══╤══════╤════════╤═════╗
║и                 Имя                   │Размер│  Дата  │Время║
║⌂..                                     │ Вверх│24.02.12│08:18║
║├Folder0                                │ Папка│24.02.12│08:09║
║├Folder1                                │ Папка│24.02.12│08:18║
║├Folder2                                │ Папка│24.02.12│08:18║
║├Folder3                                │ Папка│24.02.12│08:18║
║├Folder4                                │ Папка│24.02.12│08:18║
║├Folder5                                │ Папка│24.02.12│08:18║
║├Folder6                                │ Папка│24.02.12│08:18║
…
Код: Выделить весь код
╔═════════════════════ C:\Catalog\Folder1 ══════╤════════╤═════╗
║и                 Имя                   │Размер│  Дата  │Время║
║⌂..                                     │ Вверх│24.02.12│08:18║
║├01                                     │ Папка│24.02.12│08:18║
║├02                                     │ Папка│24.02.12│08:18║
║├03                                     │ Папка│24.02.12│08:18║
║├ParametersСсылка│24.02.12│08:18║
║¿7-zip                               chm│ 92392│18.04.11│20:43║
║░Descript                            ion│    22│24.02.12│08:08║
║                                        │      │        │     ║
…
Код: Выделить весь код
╔══════════════════════════ Атрибуты ══════════════════════════╗
║                  Изменить файловые атрибуты                  ║
║                          Parameters                          ║
║ Ссылка:      C:\Catalog\Folder0\Parameters                   ║
╟──────────────────────────────────────────────────────────────╢
║ Владелец:    @@@@@@@@@@                                      ║
╟──────────────────────────────────────────────────────────────╢
║ [ ] Только для чтения         [ ] Неиндексируемый            ║
║ [ ] Архивный                  [ ] Разреженный                ║
║ [ ] Скрытый                   [ ] Временный                  ║
║ [ ] Системный                 [ ] Автономный                 ║
║ [ ] Сжатый                    [x] Точка повторной обработки  ║
║ [ ] Зашифрованный             [ ] Виртуальный                ║
╟──────────────────────────────────────────────────────────────╢
║                                     ДД.ММ.ГГГГГ чч:мм:сс.мс  ║
║ Время последней записи:             24.02.2012  08:18:39.812 ║
║ Время создания:                     24.02.2012  08:18:39.812 ║
║ Время последнего доступа:           24.02.2012  08:18:39.812 ║
║ Время изменения:                    24.02.2012  08:18:39.812 ║
║              [ Исходное ] [ Текущее ] [ Сброс ]              ║
╟──────────────────────────────────────────────────────────────╢
║ [ ] Обрабатывать вложенные папки                             ║
╟──────────────────────────────────────────────────────────────╢
║       { Установить } [ Системные свойства ] [ Отмена ]       ║
╚══════════════════════════════════════════════════════════════╝


Попробуйте прочитать справку и поправить код так, чтобы ссылка корректно создавалась.

Ну, или выложите результат:
Код: Выделить весь код
mklink.exe /?
— посмотрим.

P.S. Вот ещё результат:
читать дальше »
Код: Выделить весь код
C:\Catalog\Folder1>fsutil.exe reparsepoint query Parameters
Цитата:
Код: Выделить весь код
Значение тега повторной обработки: 0xa000000c
Значение тега: Майкрософт
Значение тега: Суррогат имени
GUID: {00420000-0044-003A-0000-00005C003F00}
Длина данных: 0x0000008c
Данные повторной обработки:
0000:  3f 00 5c 00 43 00 3a 00 5c 00 43 00 61 00 74 00  ?.\.C.:.\.C.a.t.
0010:  61 00 6c 00 6f 00 67 00 5c 00 46 00 6f 00 6c 00  a.l.o.g.\.F.o.l.
0020:  64 00 65 00 72 00 30 00 5c 00 50 00 61 00 72 00  d.e.r.0.\.P.a.r.
0030:  61 00 6d 00 65 00 74 00 65 00 72 00 73 00 00 00  a.m.e.t.e.r.s...
0040:  43 00 3a 00 5c 00 43 00 61 00 74 00 61 00 6c 00  C.:.\.C.a.t.a.l.
0050:  6f 00 67 00 5c 00 46 00 6f 00 6c 00 64 00 65 00  o.g.\.F.o.l.d.e.
0060:  72 00 30 00 5c 00 50 00 61 00 72 00 61 00 6d 00  r.0.\.P.a.r.a.m.
0070:  65 00 74 00 65 00 72 00 73 00 00 00 00 00 00 00  e.t.e.r.s.......
0080:  00 00 00 00 00 00 00 00 00 00 00 00              ............

Отправлено: 10:49, 24-02-2012 | #12


Аватара для Hollou

Новый участник


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

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



Но толку то от этой пикчи. Я не очень силён в написании батников. Попробую разобраться.

Ещё вопрос: можете ли вы состряпать батник с простым копированием папок без исключений и символьных ссылок. Теже 29 копий папки Folder0 в одном с ней каталоге.

Последний раз редактировалось Hollou, 24-02-2012 в 11:07.


Отправлено: 10:59, 24-02-2012 | #13


Ветеран


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

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


Hollou, аналогично.

Я добавил в код «echo» для визуальной проверки строки с «mklink.exe»:
Код: Выделить весь код
echo mklink.exe /d "%sDestFolder%\%LastPartName:~0,-1%%%i\%sExcludeFolder%" "%sSourceFolder%\%sExcludeFolder%"
	mklink.exe /d "%sDestFolder%\%LastPartName:~0,-1%%%i\%sExcludeFolder%" "%sSourceFolder%\%sExcludeFolder%"
)
…
Вижу при исполнении:
Цитата:
Код: Выделить весь код
mklink.exe /d "C:\Catalog\Folder1\Parameters" "C:\Catalog\Folder0\Parameters"
У Вас «mklink.exe» выводит какие-либо сообщения об ошибках?

Отправлено: 11:08, 24-02-2012 | #14


Аватара для Hollou

Новый участник


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

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


Нет, но символическая ссылка не появляется. Выводится тоже самое, что и у вас.

Отправлено: 11:19, 24-02-2012 | #15


Ветеран


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

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


Hollou, тогда я бессилен, пока не доберусь до машины с более свежей ОС.

Отправлено: 11:21, 24-02-2012 | #16


Аватара для Hollou

Новый участник


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

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


Большое спасибо за приложенные усилия и потраченное время. Но не забывайте про мой вопрос, пожалуйста. Сам вряд ли допилю.

Отправлено: 11:25, 24-02-2012 | #17


Аватара для Hollou

Новый участник


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

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


Допилил для 2ой задачи.
Вот >>
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=
set sDestFolder=

call :GetLastPartName "%sSourceFolder%"

call :GetTemporaryName

for /l %%i in (1, 1, 29) do (
	xcopy.exe "%sSourceFolder%" "%sDestFolder%\%LastPartName:~0,-1%%%i\" /e /f /h /r /k /y
)

endlocal
PAUSE
rem ==========================================================================

rem ==========================================================================
:GetLastPartName
    setlocal enableextensions enabledelayedexpansion

    set sLastPart=%~nx1
    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sLastPart%
    exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem 
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================


Вроде всё порядком.

Кривоватое решение для первой задачи (слегка изменил строку с мклинк):
Код: Выделить весь код
rem	echo mklink.exe /d "%sDestFolder%\%LastPartName:~0,-1%%%i\%sExcludeFolder%" "%sSourceFolder%\%sExcludeFolder%"
cd "%sDestFolder%\%LastPartName:~0,-1%%%i"
mklink /d %sExcludeFolder% "%sSourceFolder%\%sExcludeFolder%"
Пашет только с отрабатыванием из копированной папки.

Последний раз редактировалось Hollou, 24-02-2012 в 13:23.


Отправлено: 11:51, 24-02-2012 | #18


Ветеран


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

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


Hollou, добрался, проверил.

При исполнении «mklink.exe» на Windows Server 2008 R2 вижу сообщение об ошибке:
Код: Выделить весь код
Ошибка в синтаксисе команды.
Hollou, уберите в пакетном файле из #10 точку и расширение у mklink:
Код: Выделить весь код
	mklink.exe /d "%sDestFolder%\%LastPartName:~0,-1%%%i\%sExcludeFolder%" "%sSourceFolder%\%sExcludeFolder%"
И всё заработает.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 24-02-2012 | #19


Ветеран


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

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


Из письма в ПМ:
Цитата Hollou:
Не могли бы вы переделать скриптец под создание 64-ёх копий папки?
Навскидку — заменить «29» в
Код: Выделить весь код
for /l %%i in (1, 1, 29) do (
на «64». Не проверялось.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:12, 21-03-2012 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Перемещение файлов с переименованием Unm Скриптовые языки администрирования Windows 1 15-10-2011 12:20
CMD/BAT - копирование файлов удовлетворяющих маске из одного каталога в два других Gablik Скриптовые языки администрирования Windows 5 15-09-2011 15:13
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
Интерфейс - Проблема с переименованием диска evgdlm Microsoft Windows 7 3 08-06-2009 08:11




 
Переход