Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   копирование определенных папок без "мусора" (http://forum.oszone.net/showthread.php?t=220078)

cher 09-11-2011 21:17 1791814

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

xGETSx 09-11-2011 21:55 1791844

Код:

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 1791853

xGETSx
mkdir не нужен папка существует..
Цитата:

Цитата xGETSx
Так подойдет? Или нужно скопировать только папки, без содержащихся в них файлов? »

нет .. надо все содержимое. с подпапками.
скрипт не срабатывает - как понял из за того,что указанны точные папки копирования. их там нет.
надо копировать в пустую папку 3.
да и copy насколько понимаю плохо подходит для копирования папок...
- это так.... моё лузерное мнение. даже не заморачивался с copy.help "сказал" -это для файлов....

Цитата:

Цитата xGETSx
xcopy "c:\updat" "f:\3" /T /E
rm /s "f:\3\temp" »

копируются пустые папки с ненужной папкой temp

xGETSx 09-11-2011 22:25 1791863

Цитата:

Цитата cher
скрипт не срабатывает - как понял из за того,что указанны точные папки копирования. их там нет. »

А я думаю почему так просто :) 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 1791868

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

xGETSx 09-11-2011 22:38 1791873

Тогда только через ROBOCOPY

Код:

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

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

cher 09-11-2011 22:54 1791883

недопустимый параметр "c:\updat\*" и с кавычками и без

xGETSx 09-11-2011 22:56 1791885

Цитата:

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 1791891

Слушай... сработало.
Цитата:

Цитата xGETSx
del /Q "f:\3\*" »

удаление файлов вне каталогов?
а повторно с копированием с уже имеющими папками и файлами?... насколько понимаю robocopy фиолетово-тупо заменит и все?
p.s-dirs получается не нужен?

xGETSx 09-11-2011 23:08 1791896

Код:

ATTRIB +I "c:\updat\*"
robocopy "c:\updat" "f:\3" /S /E /XD "c:\updat\temp" /XA:NET
ATTRIB -I "c:\updat\*"

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

Цитата:

Цитата cher
удаление файлов вне каталогов? »

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

Цитата:

Цитата cher
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 1791903

Цитата:

Цитата xGETSx
/XA:NET »

это что?
Цитата:

Цитата xGETSx
ATTRIB +I »

а если они в виду защищенности не захотят себя "дополнять"?

Цитата:

Цитата xGETSx
"c:\updat\temp" "c:\updat\1" "c:\updat\2" "c:\updat\3" »

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

xGETSx 09-11-2011 23:37 1791909

Цитата:

Цитата cher
это что? »

Это исключение по типу атрибута. NET это тоже самое что и I, только для robocopy
Цитата:

Цитата cher
во блин.....еще бы их в одну маску.. типа "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.
Цитата:

Цитата cher
а если они в виду защищенности не захотят себя "дополнять"? »

Это как? Read Only не поможет.

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

cher 09-11-2011 23:47 1791912

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

xGETSx 09-11-2011 23:58 1791918

Команда for
Тут довольно подробно расписано. Я уже от компа просто отошел. Завтра напишу команду полностью с for.

cher 10-11-2011 00:05 1791922

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

xGETSx 10-11-2011 00:15 1791927

Код:

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 1791932

Проверю завтра. Сплю...
%~dpi - в help-е нет... лузеры мы лузеры...
что такое?

xGETSx 10-11-2011 00:35 1791940

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

Iska 11-11-2011 00:04 1792662

Цитата:

Цитата cher
%~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 2641975

С Вашей задачей у успехом справится CopyMik

например:
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
если файлы уже существуют то перезаписывает их


Время: 00:13.

Время: 00:13.
© OSzone.net 2001-