CMD/BAT - [решено] Перемещение файлов по маске
-
finderhd
CMD/BAT - [решено] Перемещение файлов по маске
Добрый день.
Есть батник, который перемещает на сетевом диске из нескольких папок текстовые файлы 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 ?
Есть батник, который перемещает на сетевом диске из нескольких папок текстовые файлы 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 - [решено] Перемещение файлов по маске
Цитата finderhd:
но есть вопрос, как сделать так, чтобы папка с годом была динамическая?
Код:
но есть вопрос, как сделать так, чтобы папка с годом была динамическая?
CMD/BAT - [решено] Перемещение файлов по маске
Код:
Код: Выделить всё
set sYear=%date:~6,4%
echo [%sYear%]-
finderhd
Re: CMD/BAT - [решено] Перемещение файлов по маске
А куда эту строчку необходимо вставить? Вместо 2020 ? Если есть возможность, покажите плз. напримере батника выше.
-
megaloman
Re: CMD/BAT - [решено] Перемещение файлов по маске
Цитата finderhd:
текстовые файлы test_MMDD.txt по маске "test_2020"
Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.
Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?
Позволю себе наглость применить решение(экспромпт, не проверял) Iska к тому, что Вы написали:
Код:
при условии, что дата в системе в формате дд.мм.гггг, папка с годом уже существует, в начале года не может быть ситуации, когда в исходных папках есть файлы с именами за прошлый год.
текстовые файлы 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 - [решено] Перемещение файлов по маске
Цитата megaloman:
Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.
Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?
Позволю себе наглость применить решение(экспромпт, не проверял) Iska к тому, что Вы написали:
Я имел в виду, что файлы помещаются в папку в таком формате, т.е. с месяцем и датой, а батник смотрит по маске года. Т.е. важен только год, а не месяц или дата файла. Прошу прощения, если не уточнил сразу.
Батник должен работать таким образом, чтобы все файлы, которые будут помещаться в папки test1 test2 и test3 перемещались в соответствующие (в эти же) папки по соответствующему году, чтобы в батнике каждый год не менять руками именно год.
Т.е. структура каталогов должна быть будет такой последовательности:
test1
2020
test_2020.txt
2021
test_2021.txt
2022
test_2022.txt
Т.е. файлов за 2021 и 2022 год естественно еще нет, они появятся в папке когда будет соответствующий год. Т.е. здесь также важно учитывать не только год в имени файла, но и дата создания файла. При этом папка с годом должна создаваться сама. Если это условие сложное, то можно в принципе заранее сделать папок на лет 10 вперед, этого уж точно хватит
Главное, чтобы не менять в батнике год руками каждый раз.
ОС - Windows Server 2012.
Не понимаю, Вы указали в имени файла месяцы и дни, а маску пишите на год, причем после года подразумеваете еще какие-то символы.
Какие всё таки имена файлов? Год берётся из имени? Или из сегодняшней даты? Или из даты последнего изменения файла?
Позволю себе наглость применить решение(экспромпт, не проверял) 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 - [решено] Перемещение файлов по маске
Цитата megaloman:
каким образом? В Вашем примере robocopy время создания никак не учитывает
Ну да, не учитывает, т.к. год указан в явном, а не динмаическом виде. Наверное я не правильно выразился, вобщем, главное, чтобы последующие папки с годами создавались автоматически, и туда бы перемещались файлы по также, динамической маске, чтобы не править батник руками каждый год.
каким образом? В Вашем примере robocopy время создания никак не учитывает
»
Ну да, не учитывает, т.к. год указан в явном, а не динмаическом виде. Наверное я не правильно выразился, вобщем, главное, чтобы последующие папки с годами создавались автоматически, и туда бы перемещались файлы по также, динамической маске, чтобы не править батник руками каждый год.
-
finderhd
Re: CMD/BAT - [решено] Перемещение файлов по маске
Вобщем, попробовал такой батник
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 не переместились.
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:
*bank_stat%sYear%.txt*
Цитата finderhd:
*test_2020*.txt*
Дайте одно реальное имя, маска правильно указана? Символ "_" перед годом не нужен?
Вариант
[spoiler]Код: [/spoiler]
*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 - [решено] Перемещение файлов по маске
Вобщем, попробовал такой батник
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 не переместились.
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 - [решено] Перемещение файлов по маске
finderhd, А смотрите, что Вы наваяли, и какое реальное имя:
Код:
Вы же хотели иметь в имени год, который руками не вводится. Ваша маска не соответствует файлу. Я бы написал
report_stat%sYear%*ReadUser.txt
Код:
Код: Выделить всё
report_stat2020011713ReadUser.txt
*report_stat2020%sYear%.txt*Вы же хотели иметь в имени год, который руками не вводится. Ваша маска не соответствует файлу. Я бы написал
report_stat%sYear%*ReadUser.txt