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

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

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение файлов по маске

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


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

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


Добрый день.
Есть батник, который перемещает на сетевом диске из нескольких папок текстовые файлы 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 ?

Отправлено: 13:58, 16-01-2020

 

Ветеран


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

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


Цитата finderhd:
но есть вопрос, как сделать так, чтобы папка с годом была динамическая? »
Код: Выделить весь код
set sYear=%date:~6,4%
echo [%sYear%]

Отправлено: 19:11, 16-01-2020 | #2



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

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


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


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

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


А куда эту строчку необходимо вставить? Вместо 2020 ? Если есть возможность, покажите плз. напримере батника выше.

Отправлено: 10:25, 17-01-2020 | #3


Ветеран


Contributor


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

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


Цитата finderhd:
текстовые файлы test_MMDD.txt по маске "test_2020" »
Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.
Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?
Позволю себе наглость применить решение(экспромпт, не проверял) Iska к тому, что Вы написали:
Код: Выделить весь код
set sYear=%date:~6,4%
ROBOCOPY \\netdisk\Folder1\ \\netdisk\Folder1\%sYear%\*test_%sYear%*.txt* /MOV /IS
ROBOCOPY \\netdisk\Folder2\ \\netdisk\Folder2\%sYear%\*test_%sYear%*.txt* /MOV /IS
ROBOCOPY \\netdisk\Folder3\ \\netdisk\Folder3\%sYear%\*test_%sYear%*.txt* /MOV /IS
при условии, что дата в системе в формате дд.мм.гггг, папка с годом уже существует, в начале года не может быть ситуации, когда в исходных папках есть файлы с именами за прошлый год.

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


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

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:47, 17-01-2020 | #4


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


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

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


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

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

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

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

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

ОС - Windows Server 2012.

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


Отправлено: 12:51, 17-01-2020 | #5


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


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

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


Цитата megaloman:
каким образом? В Вашем примере robocopy время создания никак не учитывает »
Ну да, не учитывает, т.к. год указан в явном, а не динмаическом виде. Наверное я не правильно выразился, вобщем, главное, чтобы последующие папки с годами создавались автоматически, и туда бы перемещались файлы по также, динамической маске, чтобы не править батник руками каждый год.

Отправлено: 12:59, 17-01-2020 | #6


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


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

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


Вобщем, попробовал такой батник

set sYear=%date:~6,4%
ROBOCOPY c:\test\test1\ c:\test\test1\%sYear%\ *report_stat2020%sYear%.txt* /MOV /IS
ROBOCOPY c:\test\test2\ c:\test\test2\%sYear%\ *report_stat2020%sYear%.txt* /MOV /IS
ROBOCOPY c:\test\test3\ c:\test\test3\%sYear%\ *report_stat2020%sYear%.txt* /MOV /IS

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

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


Отправлено: 13:40, 17-01-2020 | #7


Ветеран


Contributor


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

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


Цитата finderhd:
*bank_stat%sYear%.txt* »
Цитата finderhd:
*test_2020*.txt* »
Дайте одно реальное имя, маска правильно указана? Символ "_" перед годом не нужен?
Вариант
Код: Выделить весь код
@Echo Off
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Year=%%d"
	Set /A Year=%Year:~0,4%

rem	Call :MyMove "Z:\Box_In" "Z:\Box_Out" "*bank_stat_" ".txt*"

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

:MyMove
	FOR /L %%i IN (0,-1,-1) DO (
		Call Set /A Y=%Year%+%%i
		Call 2>nul Md "%~2\%%Y%%"
		Call RoboCopy "%~1" "%~2\%%Y%%" "%~3%%Y%%%~4" /MOV /IS			
	)
Exit /B

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


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


Отправлено: 13:57, 17-01-2020 | #8


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


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

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


Символа "_" нет.
Вобщем, вот такой файл:

report_stat2020011713ReadUser.txt
последняя цифра - это час, но мне час учитывать не нужно, а только год

Отправлено: 16:00, 17-01-2020 | #9


Ветеран


Contributor


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

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


finderhd, А смотрите, что Вы наваяли, и какое реальное имя:
Код: Выделить весь код
 report_stat2020011713ReadUser.txt
*report_stat2020%sYear%.txt*
Вы же хотели иметь в имени год, который руками не вводится. Ваша маска не соответствует файлу. Я бы написал

report_stat%sYear%*ReadUser.txt

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:13, 17-01-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Перемещение файлов по маске с созданием папки по дате в названии файла AndreH Скриптовые языки администрирования Windows 5 08-08-2018 09:14
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске VitHAK Скриптовые языки администрирования Windows 14 23-12-2013 08:57
CMD/BAT - Перемещение файлов по маске с сохранением структуры папок... nfs911 Скриптовые языки администрирования Windows 6 15-02-2013 00:08
CMD/BAT - Перемещение файлов по маске SanyaJoker Скриптовые языки администрирования Windows 0 17-11-2011 12:54
Delphi - Перемещение и удаление файлов по маске. Putin-mode Программирование и базы данных 1 21-06-2010 12:16




 
Переход