Войти

Показать полную графическую версию : копирование определенных папок без "мусора"


cher
09-11-2011, 21:17
В папке c:\updat есть 4 папки.1,2,3,temp и множество файлов различного расширения.
Надо скопировать только папки 1,2,3 в папку f:\3
Как не копировать папку temp "смог", а вот файлы ... исключить из копирования не могу(маску по названиям даже не пытался-слишком много).(ну лузер в батанике, чеж теперь :) )
использовал xcopy и robocopy. через for тоже запутался.
насколько могу судить ... просто не могу "сделать" правильную маску.

xGETSx
09-11-2011, 21:55
mkdir "f:\3"
copy /Y "c:\updat\1\*" "f:\3\1\*"
copy /Y "c:\updat\2\*" "f:\3\2\*"
copy /Y "c:\updat\3\*" "f:\3\3\*"
pause
Так подойдет?

xcopy "c:\updat" "f:\3" /T /E
rm /s "f:\3\temp"
Или нужно скопировать только папки, без содержащихся в них файлов?

cher
09-11-2011, 22:13
xGETSx
mkdir не нужен папка существует..
Так подойдет? Или нужно скопировать только папки, без содержащихся в них файлов? »
нет .. надо все содержимое. с подпапками.
скрипт не срабатывает - как понял из за того,что указанны точные папки копирования. их там нет.
надо копировать в пустую папку 3.
да и copy насколько понимаю плохо подходит для копирования папок...
- это так.... моё лузерное мнение. даже не заморачивался с copy.help "сказал" -это для файлов....

xcopy "c:\updat" "f:\3" /T /E
rm /s "f:\3\temp" »
копируются пустые папки с ненужной папкой temp

xGETSx
09-11-2011, 22:25
скрипт не срабатывает - как понял из за того,что указанны точные папки копирования. их там нет. »
А я думаю почему так просто :) javascript:Sham_ins('%20:)%20')

xcopy "c:\updat\*" "f:\3\*" /S /E
rd /S "f:\3\temp\*"
Копирует даже пустые папки

xcopy "c:\updat\*" "f:\3\*" /S
rd /S "f:\3\temp\*"
Не копирует пустые папки

Еще поиграюсь EXCLUDE, может что и выйдет

cher
09-11-2011, 22:29
xGETSx, не забывай про лишние файлы в структуре каталога.
temp исключить из копирования и я могу. а вот файлы нет. :(
robocopy влегкую "расправляется" с папками. маску для файлов "написать" не могу/не умею.

xGETSx
09-11-2011, 22:38
Тогда только через ROBOCOPY

robocopy "c:\updat\*" "f:\3\*" /S /E /XF * /XD "c:\updat\temp"
Без ключа /E пустые папки копироваться не будут.

Не, косяк. Так вообще файлы не копируются...

cher
09-11-2011, 22:54
недопустимый параметр "c:\updat\*" и с кавычками и без

xGETSx
09-11-2011, 22:56
Robocopy can not exclude files matching a wildcard including a directory e.g. /XF pictures\*.jpg generates an error.
Вот в чем проблема.

robocopy "c:\updat" "f:\3" /S /E /XD "c:\updat\temp"
del /Q "f:\3\*"

cher
09-11-2011, 23:07
Слушай... сработало.
del /Q "f:\3\*" »
удаление файлов вне каталогов?
а повторно с копированием с уже имеющими папками и файлами?... насколько понимаю robocopy фиолетово-тупо заменит и все?
p.s-dirs получается не нужен?

xGETSx
09-11-2011, 23:08
ATTRIB +I "c:\updat\*"
robocopy "c:\updat" "f:\3" /S /E /XD "c:\updat\temp" /XA:NET
ATTRIB -I "c:\updat\*"
И если файлов уж очень много - можно поизгаляться. Но это при условии что других файлов с атрибутом I нет, иначе они тоже не скопируются. Можно найти такой атрибут, которого на этих файлах быть не может и использовать.

удаление файлов вне каталогов? »
Удаление файлов только внутри корневой папки(в нашем случае f:\3)

dirs получается не нужен? »
dirs - обозначение просто. В ключ /XD можно впихнуть несколько папок
robocopy "c:\updat" "f:\3" /S /E /XD "c:\updat\temp" "c:\updat\1" "c:\updat\2" "c:\updat\3"

cher
09-11-2011, 23:19
/XA:NET » это что?
ATTRIB +I » а если они в виду защищенности не захотят себя "дополнять"?

"c:\updat\temp" "c:\updat\1" "c:\updat\2" "c:\updat\3" »- во блин.....еще бы их в одну маску.. типа "c:\updat\1,2,3,temp"

xGETSx
09-11-2011, 23:37
это что? »
Это исключение по типу атрибута. NET это тоже самое что и I, только для robocopyво блин.....еще бы их в одну маску.. типа "c:\updat\1,2,3,temp" »
Как я уже писал
Robocopy can not exclude files matching a wildcard including a directory e.g. /XF pictures\*.jpg generates an error.

а если они в виду защищенности не захотят себя "дополнять"? »
Это как? Read Only не поможет.

Все равно атрибут добавится если запускать от имени администратора. И если владелец файла - админ или пользователь данного компа.

cher
09-11-2011, 23:47
xGETSx, Ок! Спасибо! кое, что понял.
в завершение- а если, через for -robocopy "прибить". Чисто теоретически понимаю, что возможно... даже и с xcopy. Чисто практически "мыслей" не хватает.

xGETSx
09-11-2011, 23:58
Команда for (http://www.batfile.ru/2008/01/09/for.html)
Тут довольно подробно расписано. Я уже от компа просто отошел. Завтра напишу команду полностью с for.

cher
10-11-2011, 00:05
xGETSx, "мануал" по for то не проблемно.,но ...файлы "выкинуть" не смог. Папку temp без проблем.
без del.-не "рекурсивно".

xGETSx
10-11-2011, 00:15
for /D %%i in ("c:\updat") do xcopy /Y "%~dpi\*" "f:\3\%i\*"
Но я не уверен. Пишу с телефона вообще :)


Если в папках есть еще папки - можно попробовать
for /D /R %%i in ("c:\updat") do xcopy /Y "%~dpi\*" "f:\3\%i\*"
Или
for /R %%i in ("c:\updat") do xcopy /Y "%~dpi\*" "f:\3\%i\*"

cher
10-11-2011, 00:24
Проверю завтра. Сплю...
%~dpi - в help-е нет... лузеры мы лузеры...
что такое?

xGETSx
10-11-2011, 00:35
Если к переменной добавить %~dp, переменная превратится в имя диска и полный путь к файлу.
Не ./2, а D:\1\2\

Iska
11-11-2011, 00:04
%~dpi - в help-е нет... лузеры мы лузеры...
что такое? »
for /?
Операции подстановки ссылок на переменные команды FOR также расширены.
Допускается применение следующих синтаксических конструкций:

%~I - из переменной %I удаляются обрамляющие кавычки (")
%~fI - переменная %I расширяется до полного имени файла
%~dI - из переменной %I выделяется только имя диска
%~pI - из переменной %I выделяется только путь к файлу
%~nI - из переменной %I выделяется только имя файла
%~xI - из переменной %I выделяется расширение имени файла
%~sI - полученный путь содержит только короткие имена
%~aI - переменная %I расширяется до атрибутов файла
%~tI - переменная %I расширяется до даты /времени файла
%~zI - переменная %I расширяется до размера файла
%~$PATH:I - проводится поиск по каталогам, заданным в переменной
среды PATH, и переменная %I заменяется на полное
имя первого найденного файла. Если переменная PATH
не определена или в результате поиска не найден ни
ни один файл, то этот модификатор заменяется на пустую
строку

При объединении нескольких операторов можно получить следующие результаты:

%~dpI - переменная %I заменяется только на имя диска и путь
%~nxI - переменная %I заменяется только на имя файла и его
расширение
%~fsI - переменная %I заменяется только на полный путь с
краткими именами
%~dp$PATH:I - проводится поиск по каталогам, заданным в переменной
среды PATH, и переменная %I заменяется на имя диска
и путь к первому найденному файлу.
%~ftzaI - переменная %I заменяется на строку, выдаваемую
командой DIR

В приведенных выше примерах переменные %I и PATH можно заменить на
любые другие допустимые значения. В таких синтаксических конструкциях
за символами %~ может следовать любое имя переменной цикла FOR.
Рекомендуется использовать заглавные буквы для имен таких переменных,
например, %I, что делает их более заметными, а также позволяет отличать
их от обозначений модификаторов, которые не различают используемый регистр.

Есть и в помощи.

Windows XP:
Подстановка переменных
Были расширены модификаторы подстановок для ссылок на переменные в for. Приведенная ниже таблица перечисляет варианты синтаксических конструкций (на примере переменной I).

Переменная с модификатором Описание
%~I Расширение %I, которое удаляет окружающие кавычки ("").
%~fI Расширение %I до полного имени пути.
%~dI Замена %I именем диска.
%~pI Замена %I на путь.
%~nI Замена %I одним именем файла.
%~xI Замена %I расширением имени файла.
%~sI Замена путем, содержащим только короткие имена.
%~aI Замена %I атрибутами файла.
%~tI Замена %I временем модификации файла.
%~zI Замена %I размером файла.
%~$PATH:I Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

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

Переменная с объединенными модификаторами Описание
%~dpI Замена %I именем диска и путем.
%~nxI Замена %I именем файла и расширением.
%~fsI Замена %I полным именем пути с короткими именами.
%~dp$PATH:I Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I именем диска и путем первого найденного файла.
%~ftzaI Замена %I строкой, аналогичной результату работы программы dir.

В приведенных выше примерах %I и PATH могут быть заменены другими допустимыми значениями. Допустимое имя переменной for прекращает %~ syntax.

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


Windows 7:
Variable substitution

The following table lists optional syntax (for any variable I).


Variable with modifier Description
%~I
Expands %I which removes any surrounding quotation marks (" ").

%~fI
Expands %I to a fully-qualified path name.

%~dI
Expands %I to a drive letter only.

%~pI
Expands %I to a path only.

%~nI
Expands %I to a file name only.

%~xI
Expands %I to a file name extension only.

%~sI
Expands path to contain short names only.

%~aI
Expands %I to the file attributes of file.

%~tI
Expands %I to the date and time of file.

%~zI
Expands %I to the size of the file.

%~$PATH:I
Searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first directory found. If the environment variable name is not defined or the file is not found by the search, this modifier expands to the empty string.

The following table lists modifier combinations that you can use to get compound results.


Variable with combined modifiers Description
%~dpI
Expands %I to a drive letter and path only.

%~nxI
Expands %I to a file name and extension only.

%~fsI
Expands %I to a full path name with short names only.

%~dp$PATH:I
Searches the directories that are listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found.

%~ftzaI
Expands %I to an output line that is like dir.

In the above examples, you can replace %I and PATH with other valid values. A valid for variable name terminates the %~ syntax.

By using uppercase variable names such as %I, you can make your code more readable and avoid confusion with the modifiers, which are not case sensitive.

rusmikle@vk
10-06-2016, 13:53
С Вашей задачей у успехом справится CopyMik (http://www.superbasis.de/copymik/index.htm#rus)

например:
copymik.exe c:\Documents d:\DocArchiv /MD buch* progr* important* /MF *.txt *.cpp *.jpg *.bmp /XCD .svn tmp* /XCF *.tmp *.db /OF
Что делает:
Копирует все файлы с масками *.txt *.cpp *.jpg *.bmp из папок с масками buch* progr* important*
при этом не копирует папки с масками .svn tmp*.
и не копирует файлы с масками *.tmp *.db
если файлы уже существуют то перезаписывает их




© OSzone.net 2001-2012