|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение файлов по маске |
|
|
CMD/BAT - [решено] Перемещение файлов по маске
|
Новый участник Сообщения: 42 |
Добрый день.
Есть батник, который перемещает на сетевом диске из нескольких папок текстовые файлы 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата finderhd:
Set /A OldYear=%Year%-5 - пять лет Set /A OldYear=%Year%-1 - текущий год и прошлый Set /A OldYear=%Year%-0 или Set /A OldYear=%Year% - только текущий год (0 оставил для памяти, куда вставлять количество лет) Надеюсь пути в скрипте укажете свои правильно, если брать Ваш пример из вопроса, то: Call :MyMove "\\netdisk\Folder1" "\\netdisk\Folder1" "report_stat" "??????ReadUser.txt" Цитата finderhd:
|
||
------- Последний раз редактировалось megaloman, 21-01-2020 в 14:22. Отправлено: 14:13, 21-01-2020 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
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 Move /Y "%~1\%~3%%Y%%%~4" "%~2\%%Y%%\" ) Exit /B Цитата megaloman:
|
||
Отправлено: 15:57, 21-01-2020 | #22 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Такое ощущение, что у нас разговор на разные темы, мы обсуждаем разные батники и Вы меня не слышите. Я ссылаюсь на один (кстати, я бы его не стал делать, если бы Вы не предъявляли претензий, что файлы 2018 года не обрабатываются), а Вы мне цитируете другой. Повторю, чтобы не было разночтений.
Скрипт: @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" "report_stat" "??????ReadUser.txt"
Call :MyMove "\\USA-CIA\Test111\test1" "\\USA-CIA\Test222\test1" "report_stat" "??????ReadUser.txt"
Call :MyMove "\\USA-CIA\Test111\test2" "\\USA-CIA\Test222\test2" "report_stat" "??????ReadUser.txt"
Call :MyMove "\\USA-CIA\Test111\test3" "\\USA-CIA\Test222\test3" "report_stat" "??????ReadUser.txt"
Exit /B 0
:MyMove
Set /A OldYear=%Year%-5
FOR /L %%Y IN (%Year%,-1,%OldYear%) DO (
If Exist "%~1\%~3%%Y%~4" (
If Not Exist "%~2\%%Y\" Md "%~2\%%Y"
Move /Y "%~1\%~3%%Y%~4" "%~2\%%Y\"
)
)
Exit /B
Там надо изменить одну строку в зависимости от волатильности Ваших запросов: Set /A OldYear=%Year%-5 - пять лет Set /A OldYear=%Year%-1 - текущий год и прошлый Set /A OldYear=%Year%-0 или Set /A OldYear=%Year% - только текущий год (0 оставил для памяти, куда вставлять количество лет) Надеюсь пути в скрипте укажете свои правильно, если брать Ваш пример из вопроса, то: Call :MyMove "\\netdisk\Folder1" "\\netdisk\Folder1" "report_stat" "??????ReadUser.txt" |
------- Последний раз редактировалось megaloman, 21-01-2020 в 17:10. Отправлено: 17:02, 21-01-2020 | #23 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Только что проверил этот батник просто поменяв пути на свои - не работает он на WinServer 2012, на моей 7-ке винде - работает, и 2019 год папка лишняя не создается, если проверять. А вот на серваке - ничего не происходит, даже ошибку не выдает. Папка 2020 не создается, файлы остаются лежать там же где и лежали.
|
Отправлено: 16:48, 28-01-2020 | #24 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать finderhd,
Вот вариант с созданием лог-файла рядом с батником. Дайте его посмотреть.
@Echo Off cls FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Year=%%d" Set "Log=%~dpnx0_%Year:~0,8%.log" Set /A Year=%Year:~0,4% rem Call :MyMove "Z:\Box_In" "Z:\Box_Out" "report_stat" "??????ReadUser.txt" >>"%Log%" 2>>&1 Call :MyMove "\\Server\Test1\test1" "\\Server\Test1\test1" "report_stat" "??????ReadUser.txt" >>"%Log%" 2>>&1 Call :MyMove "\\Server\Test1\test2" "\\Server\Test1\test2" "report_stat" "??????ReadUser.txt" >>"%Log%" 2>>&1 Call :MyMove "\\Server\Test1\test3" "\\Server\Test1\test3" "report_stat" "??????ReadUser.txt" rem pause Exit /B 0 :MyMove Set /A NNNN+=1 Set "A=%1" &If Not Exist %1 Set "A=%1 not exist" Set "B=%2" &If Not Exist %2 Set "B=%2 not exist" Echo. Echo === %Date% %Time% =========== Year=%Year% === %NNNN% Echo 1= %A% Echo 2= %B% Echo 3= %3 Echo 4= %4 If Not Exist "%~1\%~3%Year%%~4" ( Echo "%~1\%~3%Year%%~4" not exist Dir /B /A:-D %1 ) Set /A OldYear=%Year%-5 Set /A OldYear=%Year%-0 FOR /L %%Y IN (%Year%,-1,%OldYear%) DO ( If Exist "%~1\%~3%%Y%~4" ( If Not Exist "%~2\%%Y\" Md "%~2\%%Y" Move /Y "%~1\%~3%%Y%~4" "%~2\%%Y\" ) ) Exit /B |
------- Последний раз редактировалось megaloman, 29-01-2020 в 08:49. Отправлено: 18:10, 28-01-2020 | #25 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
PS. Подумал еще про один момент, что данный скриптик может быть очень полезен для других задачек, где потребуется распределение и остальных файлов, по годам создания. Пока такой необходимости прям нет, но может же пригодиться. Если Вам не сложно, будьте добры, подскажите, что нужно добавить в скрипт, чтобы и по остальным годам создавались папки и перемещались туда файлы (чтобы скрипт смотрел именно дату создания/изменения)? |
|
Последний раз редактировалось finderhd, 12-02-2020 в 10:46. Отправлено: 10:21, 12-02-2020 | #26 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|