Подтвердить что ты не робот

Копирование файлов с помощью подстановочных знаков в пути

Предположим, что существует структура каталогов C:\users\myuser\Desktop\bob\marley.

В окнах из стартового каталога C:\users\myuser\Desktop я могу сделать "cd bo *\mar *" и cd в каталоге bob\marley. Однако я не могу выполнить "copy bo *\mar * C: \"

Мне нужно использовать команду copy, xcopy или некоторую стандартную команду Windows с подстановочными знаками в пути для копирования каталогов соответствия в пункт назначения. Я не уверен, что это ограничение копирования и xcopy, или если у меня синтаксис неправильный. Я также попробовал "xcopy/E/I bo *\mar ** C:\somedirectory".

4b9b3361

Ответ 1

Нет - вы не можете сделать это с помощью COPY или XCOPY. Существует фундаментальный недостаток того, что вы просите.

Что делать, если у вас также есть каталог с именем "boston\marathon"? Какую директорию вы хотите скопировать?

Вы можете ответить - "Я хочу оба". Но теперь у вас есть неприятная потенциальная проблема. Что делать, если оба исходных каталога содержат файл с именем "test.txt". У вас может быть только один файл с именем "test.txt" в вашем пункте назначения. Кого вы держите? Правильного ответа нет, и это хорошая причина, по которой команда предназначена для того, чтобы запретить то, что вы пытаетесь сделать.

Добавление

Если вы согласны с тем, что только одна папка соответствует шаблону, вы уже знаете все шаги для достижения своей цели следующим образом.

@echo off
cd bo*\ma*
xcopy * c:\somedirectory

Если вы хотите вернуться туда, где вы начали, используйте PUSHD/POPD вместо CD

@echo off
pushd bo*\ma*
xcopy * c:\somedirectory
popd

НО, вы должны быть очень осторожны. Бостонский\марафон может существовать, и ни PUSHD, ни CD не укажут, что есть потенциальная проблема.

Ответ 2

RusF. Примечание:

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

(Подсказка: вы хотите делать это все время, если вы управляете  большие данные. Например. Видео или видеофайлы (где много файлов  могут быть связаны с производством. Или данные истории цен  файлы в различных форматах или файлы базы данных из различных  исследовательские проекты или экспериментальные работы.)

Я уверен, что имел обыкновение делать это со старым XCOPY, но  с обновлениями (для безопасности), подстановочными знаками в имени файла, do  не работает правильно (т.е. вы можете создать структуру каталогов,  с опцией "/t", но вы не можете получить проклятые файлы внутри  каталоги для миграции! Проклятый раздражает.)

Ну, мы здесь, на ферме, всегда получаем решение. Даже если  он использует использование .44 magnum или Styer 50.:)

Итак, вот что я придумал:

Предположим, у вас есть куча каталогов, называемых "Fark_1", "Fark_2",  Fark-Special, Fark_in_the_Park, Fark99... "и т.д.

Если все эти каталоги "Fark..." существуют на диске C:\и  вы хотите перенести копию этой подструктуры в архив  диска в сети (скажем, это называется: "h:" ), вы можете просто  выполните следующие действия:

Запустите команду FOR DO из Windows (MS-DOS):

 c:\>  XCOPY  fark*  h: /s /e /f /t

            The /s /e are for copying subdirs
            and empty directories, the /f says to
            show the files, and the /t says to only
            copy the disk directories.  No XCOPY
            option seems to exist anymore to copy the
            disk structure AND the files in the
            directories.

Чтобы скопировать файлы, выполните следующие действия:  также из командной строки Windows:

 FOR /d %a in (fark*) DO XCOPY "%a" h:%a\ /s /e /f /h /k /y

            The /d says we are using directory names.
            The %a is the variable name, substituted
            into the command script for XCOPY. Make
            sure to use whatever logical name or drive
            letter you have for your archive structure.
            (ie. don't use h: in the above command,
            unless you have mapped h: to the place on
            the network where you want to copy your
            files to.)  And note, the /y option means
            overwrite any files already there.

Да, это материал старой школы unix/dos, но он работает, и вы можете поместить его в пакетное задание. И вы можете избежать mouseboy, чтобы получить работу. (Точка, щелчок, ворчание, проклятие. Повторение. Канонический процесс использования GUI, верно?) Теперь есть много причудливых способов сделать это. И различные такие как Robocopy, XXcopy и т.д. Но это получает и если у вас есть какая-либо копия Windows, вы, вероятно, уже есть объекты XCOPY и FOR-DO. Всего наилучшего. О, если вы сложите две команды в пакетное задание, тогда вы необходимо настроить синтаксис для двух уровней команды (я думаю, это правильный термин).

пример:

 REM --- copy the "fark*" files to the archive disk h:
 @echo off
 REM --- create/update the structure 
 xcopy fark* h: /s /e /f /t
 REM --- copy over the fark* dirs, and all associated subdirs
 for /d %%a in (fark*) do xcopy "%%a" "h:%%a\" /s /e /f /h /k /y
  • Русское будущее 18 апреля 2012 г.

Ответ 3

если вы хотите скопировать все файлы для всех каталогов, которые соответствуют. вы все еще можете сделать что-то вроде этого...

for /d %%d in (bo*) do (
  for /d %%e in (ma*) do (
     copy %%d\%%e\* c:\temp

но будьте осторожны в случае, когда файлы с тем же именем appera в разных каталогах.

Ответ 4

Это мой пакет script для резервного копирования некоторых папок на один диск, а другой - с помощью вышеупомянутой справки - отлично работает на Win 7.

Нет необходимости копировать структуру папок, если вы используете цикл FOR, и /S будет просто скопировать то, что изменилось

Просто стыдно, что здесь нельзя использовать регулярные выражения - или у кого-то есть более аккуратное решение?

FOR /d %%a in (2010* 2011* 2012* 201301* 2013020* 2013021* 20130222* 20130224*) DO (
  XCOPY "%%a" "Z:\Backup\My Videos\%%a\" /D /S /Y | findstr /V "0 File"
)
FOR /d %%a in (20130225* 201303*) DO (
  XCOPY "%%a" "X:\Backup\My Videos\%%a\" /D /S /Y | findstr /V "0 File"
)

Ответ 5

Итак, если вы знаете имя каталога, я не уверен, почему вы пытаетесь использовать подстановочные знаки. У меня была проблема, когда мы используем Mozilla Firefox, и для многих веб-сайтов, которые мы используем, требуется аутентификация с использованием общей доступной карты. По умолчанию Mozilla Firefox не настроен на использование CAC Reader. Поэтому я сконфигурировал свой Firefox с помощью CAC Reader, а затем захватил файлы cert8.db и secmod.db из своего User Directory C:\Users\%myname%\AppData\Roaming\Mozilla\Firefox\Profiles \???????.default

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

Я создал текстовый файл с именем Computers.txt и ввел список наших компьютеров, которые я получил из Active Directory, а затем написал следующий script для копирования .db файлов, у которых есть CAC-устройство, которое я скопировал на C:\Temp\Security

for /f %c in (C:\Temp\Computers.txt) do for /f %u in ('dir /B \\%c\C$\Users\') do for /f %m in ('dir /B \\%c\C$\Users\%u\AppData\Roaming\Mozilla\Firefox\Profiles\') do copy /Y C:\Temp\Security\*.db \\%c\C$\Users\%u\AppData\Roaming\Mozilla\Firefox\Profiles\%m\*