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

Аватара пользователя
finderhd

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

Сообщение finderhd »

Добрый день.

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

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение Iska »

Цитата finderhd:



но есть вопрос, как сделать так, чтобы папка с годом была динамическая?
CMD/BAT - [решено] Перемещение файлов по маске






Код:

Код: Выделить всё

set sYear=%date:~6,4%
echo [%sYear%]
Аватара пользователя
finderhd

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение finderhd »

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

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение megaloman »

Цитата finderhd:



текстовые файлы test_MMDD.txt по маске "test_2020"
CMD/BAT - [решено] Перемещение файлов по маске




Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.

Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?

Позволю себе наглость применить решение(экспромпт, не проверял) 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

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

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение finderhd »

Цитата megaloman:



Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.

Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?

Позволю себе наглость применить решение(экспромпт, не проверял) Iska к тому, что Вы написали:
CMD/BAT - [решено] Перемещение файлов по маске




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



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



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



test1

2020

test_2020.txt

2021

test_2021.txt

2022

test_2022.txt



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



ОС - Windows Server 2012.
Аватара пользователя
finderhd

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение finderhd »

Цитата megaloman:



каким образом? В Вашем примере robocopy время создания никак не учитывает
»




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

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение finderhd »

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



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

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение finderhd »

Цитата finderhd:



*bank_stat%sYear%.txt*
CMD/BAT - [решено] Перемещение файлов по маске





Цитата finderhd:



*test_2020*.txt*
CMD/BAT - [решено] Перемещение файлов по маске




Дайте одно реальное имя, маска правильно указана? Символ "_" перед годом не нужен?



Вариант

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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
Аватара пользователя
finderhd

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение finderhd »

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



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 не переместились.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Перемещение файлов по маске

Сообщение megaloman »

finderhd, А смотрите, что Вы наваяли, и какое реальное имя:

Код:

Код: Выделить всё

 report_stat2020011713ReadUser.txt
*report_stat2020%sYear%.txt*

Вы же хотели иметь в имени год, который руками не вводится. Ваша маска не соответствует файлу. Я бы написал



report_stat%sYear%*ReadUser.txt
Ответить

Вернуться в «Скриптовые языки администрирования Windows»