Cmd переместить файлы по маске

Обновлено: 07.07.2024

Команда XCOPY используется для копирования файлов и каталогов с сохранением их структуры. По сравнению с командой COPY имеет более широкие возможности и является наиболее гибким средством копирования в командной строке Windows

Формат командной строки:

XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/EXCLUDE:файл1[+файл2][+файл3]. ]

Параметры командной строки:

источник - Копируемые файлы.

целевой_объект - Расположение или имена новых файлов.

/A - Копирование только файлов с установленным архивным атрибутом; сам атрибут при этом не изменяется.

/M - Копирование только файлов с установленным архивным атрибутом; после копирования атрибут снимается.

/D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.

/EXCLUDE:файл1[+файл2][+файл3]. - Список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.

/P - Вывод запросов перед созданием каждого нового файла.

/S - Копирование только непустых каталогов с подкаталогами.

/E - Копирование каталогов с подкаталогами, включая пустые. Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.

/V - Проверка размера каждого нового файла.

/W - Вывод запроса на нажатие клавиши перед копированием.

/C - Продолжение копирования вне зависимости от наличия ошибок.

/I - Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог.

/Q - Запрет вывода имен копируемых файлов.

/F - Вывод полных имен исходных и целевых файлов.

/L - Вывод имен копируемых файлов.

/G - Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.

/H - Копирование, среди прочих, скрытых и системных файлов.

/R - Перезапись файлов, предназначенных только для чтения.

/T - Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /T /E.

/U - Копирование только файлов, уже имеющихся в целевом каталоге.

/K - Копирование атрибутов. При использовании команды XСOPY обычно сбрасываются атрибуты "Только для чтения".

/N - Использование коротких имен при копировании.

/O - Копирование сведений о владельце и данных ACL.

/X - Копирование параметров аудита файлов (подразумевает ключ /O).

/Y - Подавление запроса подтверждения на перезапись существующего целевого файла.

/-Y - Запрос подтверждения на перезапись существующего целевого файла.

/Z - Копирование сетевых файлов с возобновлением.

/B - Копирование символической ссылки вместо ее целевого объекта.

/J - Копирование с использованием небуферизованного ввода/вывода. Рекомендуется для очень больших файлов.

Ключ /Y можно установить через переменную среды COPYCMD.

Ключ /-Y командной строки переопределяет такую установку.

Примеры использования XCOPY

XCOPY /? - выдать краткую справку по использованию команды.

Что означает D:\copy1:
имя файла или каталога
(F = файл, D = каталог)? D

После ответа D целевой каталог будет создан и копирование будет выполняться в D:\COPY1\. Для подавления запроса на создание целевого каталога используется параметр /I:

xcopy C:\users D:\copy1 /I

xcopy C:\users D:\copy1 /H /Y /C - копирование файлов, включая скрытые и системные, с подавлением запроса на перезапись существующих и возобновлением при ошибке. Если существующий в целевом каталоге файл имеет атрибут "Только чтение", то копирование не выполняется. Для перезаписи таких файлов используется ключ /R

xcopy C:\users D:\copy1 /H /Y /C /R /S - скопировать все файлы и подкаталоги ( /S ) с перезаписью существующих без запроса ( /Y ) , включая скрытые и системные. ( /H ) с перезаписью файлов с атрибутом "Только чтение" (/R) и игнорированием ошибок ( /C )

xcopy C:\users D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем случае, но текстовый файл C:\users\listnotcopy.txt задает признаки исключения из процедуры копирования. Пример содержимого файла:

\User1\ - исключить из копирования каталог C:\users\user1
All Users исключить из копирования каталог C:\users\All Users
de*.* - исключить из копирования все файлы и каталоги, начинающиеся на буквосочетание "de"

xcopy C:\users\*.exe D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем примере, но выполняется только копирование исполняемых файлов с расширением .exe .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I - копирование всех файлов с расширением .ini из каталога временных файлов в каталог D:\copy1\ini\ . Если целевой подкаталог \ini\ не существует, то он будет создан без запроса пользователю ( /I ) .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I /D:09-16-2013 - то же, что и в предыдущем примере, но выполняется копирование только тех файлов, у которых установлена дата изменения 16 сентября 2013 года и старше.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T - создать структуру папок диска C: в каталоге D:\copy1\LISTDIR . Копирование файлов не выполняется. Копируются только папки, включая пустые, скрытые и системные.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T /D:09-16-2013 воссоздать в каталоге D:\copy1\LISTDIR структуру папок диска C: , с датой изменения 16 сентября 2013 года и позже.

Для добавления новых файлов в каталоги и обновления существующих на более поздние версии, можно использовать команду REPLACE.

Добрый день.
Есть батник, который перемещает на сетевом диске из нескольких папок текстовые файлы test_MMDD.txt по маске "test_2020" через Robocopy в те же папки в соответствующие созданию файла, год - папки были созданы в ручную.
Файлы периодически помещаются в каждую папку Folder1, Folder2, Folder3, а вечером батник запускается и перемещает файлы, если таковые есть.

ROBOCOPY \\netdisk\Folder1\ \\netdisk\Folder1\2020\ *test_2020*.txt* /MOV /IS
ROBOCOPY \\netdisk\Folder2\ \\netdisk\Folder2\2020\ *test_2020*.txt* /MOV /IS
ROBOCOPY \\netdisk\Folder3\ \\netdisk\Folder3\2020\ *test_2020*.txt* /MOV /IS

Батник соответственно нормально работает, но есть вопрос, как сделать так, чтобы папка с годом была динамическая? Чтобы в следующем году не изменять в батнике в каждой строке цифры года как в папке "2020", так и файле по маске test_2020 ?

но есть вопрос, как сделать так, чтобы папка с годом была динамическая? »

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

А куда эту строчку необходимо вставить? Вместо 2020 ? Если есть возможность, покажите плз. напримере батника выше. Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.
Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?
Позволю себе наглость применить решение(экспромпт, не проверял) Iska к тому, что Вы написали: при условии, что дата в системе в формате дд.мм.гггг, папка с годом уже существует, в начале года не может быть ситуации, когда в исходных папках есть файлы с именами за прошлый год.

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

Последний раз редактировалось megaloman, 17-01-2020 в 11:03 .

Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.
Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?
Позволю себе наглость применить решение(экспромпт, не проверял) Iska к тому, что Вы написали: »

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

Батник должен работать таким образом, чтобы все файлы, которые будут помещаться в папки test1 test2 и test3 перемещались в соответствующие (в эти же) папки по соответствующему году, чтобы в батнике каждый год не менять руками именно год.

Т.е. структура каталогов должна быть будет такой последовательности:

test1
2020
test_2020.txt
2021
test_2021.txt
2022
test_2022.txt

Т.е. файлов за 2021 и 2022 год естественно еще нет, они появятся в папке когда будет соответствующий год. Т.е. здесь также важно учитывать не только год в имени файла, но и дата создания файла. При этом папка с годом должна создаваться сама. Если это условие сложное, то можно в принципе заранее сделать папок на лет 10 вперед, этого уж точно хватит Главное, чтобы не менять в батнике год руками каждый раз.

Команда MOVE используется для перемещения или переименования файлов и каталогов. Формат командной строки:

Перемещение одного или более файлов:

MOVE [/Y | /-Y] [диск:][путь]имя_файла1[. ] назначение

MOVE [/Y | /-Y] [диск:][путь]имя_папки новое_имя_папки

Параметры командной строки:

[диск:][путь]имя_файла1 - Определяет местоположение файла или файлов, которые необходимо переместить.

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

[диск:][путь]имя_папки - Определяет папку, которую необходимо переименовать.

новое_имя_папки - Определяет новое имя папки.

/Y - Перезаписывать существующие файлы назначения без предупреждения.

/-Y - Предупреждать при перезаписи существующего файла назначения.

Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD . Оно может перекрываться ключом /-Y в командной строке. По умолчанию используется предупреждение о перезаписи, если только команда MOVE не выполняется как часть пакетного файла.

move /? - отобразить подсказку по использованию команды.

move folder1 folder2 - переименовать папку с именем folder1 в folder2 в текущем каталоге.

move E:\test\folder1 E:\test\folder2 - переименование с указанием абсолютных путей.

move C:\file1.txt D:\ - переместить файл file1.txt с диска C: на диск D:

move c:\test\file1.txt D:\folder2\file2.txt - перенести файл file1.txt из каталога test диска C: в каталог folder2 диска D: под именем file2.txt

move C:\Folder1\*.* D:\Folder2\ - переместить все файлы из каталога Folder1 диска C: в каталог Folder2 диска D:

Реализация в ОС Windows данной команды не позволяет перемещать папки на другие логические диски.

move C:\folder1 C:\folder2\folder3\folder1 - переместить каталог folder1 из корня диска C: в подкаталог \folder2\folder3

При перемещении папки в несуществующий каталог он не будет создан автоматически и команда завершится ошибкой. Команда move не работает с файлами, имеющими атрибуты "скрытый " и "системный".

Добрый день.
Есть батник, который перемещает на сетевом диске из нескольких папок текстовые файлы test_MMDD.txt по маске "test_2020" через Robocopy в те же папки в соответствующие созданию файла, год - папки были созданы в ручную.
Файлы периодически помещаются в каждую папку Folder1, Folder2, Folder3, а вечером батник запускается и перемещает файлы, если таковые есть.

ROBOCOPY \\netdisk\Folder1\ \\netdisk\Folder1\2020\ *test_2020*.txt* /MOV /IS
ROBOCOPY \\netdisk\Folder2\ \\netdisk\Folder2\2020\ *test_2020*.txt* /MOV /IS
ROBOCOPY \\netdisk\Folder3\ \\netdisk\Folder3\2020\ *test_2020*.txt* /MOV /IS

Батник соответственно нормально работает, но есть вопрос, как сделать так, чтобы папка с годом была динамическая? Чтобы в следующем году не изменять в батнике в каждой строке цифры года как в папке "2020", так и файле по маске test_2020 ?

Поправил батник, запустил. В каждом каталоге создались папки с годами 2019, 2020, но файлы не переместились.

@Echo Off
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Year=%%d"
Set /A Year=%Year:

:MyMove
FOR /L %%i IN (0,-1,-1) DO (
Call Set /A Y=%Year%+%%i
Call 2>nul Md "%

Вы же хотели иметь в имени год, который руками не вводится. Ваша маска не соответствует файлу. Я бы написал »
Не совсем понял что значит в имени год? Вы про маску файла? Нужно чтобы создавались папки и в них перемещались файлы, у которых соответствующий год создания. Дата, месяц, и время не важны. Исходный батник отлично работает, но его минус в том, что в следующем году, нужно будет руками создать новый каталог 2021 и поменять файл по маске. В принципе интересуют только текущий и последующие года. Старые не важны, т.к. там файлы по соответствующим годам уже лежат, их раньше переносили руками.

Последний раз редактировалось finderhd, 17-01-2020 в 16:27 .

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

finderhd, Применительно к моему скрипту, надо делать так: То есть пИшите маску до года и маску после года, скрипт из этого склеивает маску для нужного года.
Нужно чтобы создавались папки и в них перемещались файлы, у которых соответствующий год создания. »
Не понимаю еще раз: год в имени файла или надо вытянуть год из свойств файла? Ваш скрипт этого не делает, он берёт год по маске из имени файла. Иначе Ваш скрипт полностью не годится.

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

Последний раз редактировалось megaloman, 17-01-2020 в 16:37 .

Не понимаю еще раз: год в имени файла или надо вытянуть год из свойств файла? Ваш скрипт этого не делает, он берёт год по маске из имени файла. Иначе Ваш скрипт полностью не годится. »
В принципе, можно и так и так, без разницы, т.к. файлы создаются автоматически, по текущей дате (году) из другого источника. Т.е. какой тогда должна быть переменная, чтобы батник создавал папку динамически и переносил туда соответствующие году создания файлы.
Т.е. какой тогда должна быть переменная, чтобы батник создавал папку динамически и переносил туда соответствующие году создания файлы. »
О чем речь? О какой переменной? Реализовано! Мой скрипт берёт текущий год, если нет папки за этот год - она создаётся, в неё переносятся все файлы с этим годом. На всякий случай я пытаюсь сделать это и за прошлый год - возможна ситуация в начале года, когда на входе смесь файлов.

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

Попробовал запустить так:


@Echo Off
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Year=%%d"
Set /A Year=%Year:

Call :MyMove "C:\test\test1" "C:\test\test1" "report_stat" "*ReadUser.txt"
Call :MyMove "C:\test\test2" "C:\test\test2" "report_stat" "*ReadUser.txt"
Call :MyMove "C:\test\test3" "C:\test\test3" "report_stat" "*ReadUser.txt"
Exit /B 0

:MyMove
FOR /L %%i IN (0,-1,-1) DO (
Call Set /A Y=%Year%+%%i
Call 2>nul Md "%

В папке test1 лежат файлы созданные в 2018 г.
В папке test2 в 2019 г.
В папке test3 в 2020 г.

Теперь ситуация получше, но. что сделал батник, скажу по пунктам + комментарий

1. В папке test1 появились две папки: 2019 и 2020, папка 2018 не создалась и файлы в корне папки test1 за 2018 год не переместились.
коментарий: В принципе за предыдущие годы мне не нужно, нужно чтобы за этот и последующие.

2. В папке test2 появились две папки: 2019 и 2020 в папку 2019, файлы за 2019 год переместились.
комментарий: здесь всё хорошо, кроме того что папка 2020 не должна была создаваться. Опять же, и этот пункт можно пропустить, т.к. предыдущие годы не нужны.

3. В папке test3 появились две папки: 2019 и 2020, файлы созданные в 2020 г переместились
комментарий: папка 2019 не должна была создаваться, т.к. боюсь что скрипт может потереть важные файлы, если его на рабочей папке запустить, поэтому в батнике пока тестовые папки.

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

Читайте также: