|
Компьютерный форум 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 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Поправил батник, запустил. В каждом каталоге создались папки с годами 2019, 2020, но файлы не переместились.
Скрытый текст
@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_" ".txt*" Call :MyMove "C:\test\test1" "C:\test\test1" "*report_stat" ".txt*" Call :MyMove "C:\test\test2" "C:\test\test2" "*report_stat" ".txt*" Call :MyMove "C:\test\test3" "C:\test\test3" "*report_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:
|
|
Последний раз редактировалось finderhd, 17-01-2020 в 16:27. Отправлено: 16:17, 17-01-2020 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать finderhd, Применительно к моему скрипту, надо делать так:
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" Цитата finderhd:
Кстати, вместо Robocopy вполне подойдёт Move
@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 "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 "%~2\%%Y%%" Call Move /Y "%~1\%~3%%Y%%%~4" "%~2\%%Y%%\" ) Exit /B |
|
------- Последний раз редактировалось megaloman, 17-01-2020 в 16:37. Отправлено: 16:28, 17-01-2020 | #12 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 16:51, 17-01-2020 | #13 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата finderhd:
|
|
------- Отправлено: 16:57, 17-01-2020 | #14 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Попробовал запустить так:
Скрытый текст
@Echo Off FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Year=%%d" Set /A Year=%Year:~0,4% 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 "%~2\%%Y%%" Call Move /Y "%~1\%~3%%Y%%%~4" "%~2\%%Y%%\" ) Exit /B В папке 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 |
Отправлено: 17:11, 17-01-2020 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата finderhd:
|
|
Отправлено: 17:18, 17-01-2020 | #16 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата finderhd:
Цитата finderhd:
Доработал. Смотрим 5 последних лет, включая текущий год. (можете поставить любой диапазон)
Если данных нет, папка не создастся @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
|
||
------- Последний раз редактировалось megaloman, 21-01-2020 в 14:19. Отправлено: 17:22, 17-01-2020 | #17 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата megaloman:
Цитата megaloman:
Цитата megaloman:
|
||||
Последний раз редактировалось finderhd, 17-01-2020 в 18:51. Отправлено: 18:40, 17-01-2020 | #18 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата finderhd:
Помню о начале года и возможной смеси файлов. Естественно, если в новом году появятся файлы нового года (в имени указан новый год), то новая папка со значением нового года создастся. Смотрим Ваш пример: Цитата finderhd:
В моём последнем посте для примера прописаны разные выходные папки |
||
------- Последний раз редактировалось megaloman, 17-01-2020 в 20:27. Отправлено: 20:19, 17-01-2020 | #19 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Как я понял: Call Set /A Y=%Year%+%%i меняем на Set /A OldYear=%Year%-5 ? А почему 1 советуете, а не -5? Цитата megaloman:
Цитата megaloman:
upd: попробовал Set /A OldYear=%Year%-5 - на обычном компе работает корректно (ОС: Win7 rus) - файлы перемещаются как надо, папка создается, на сервере (Win2012 R2 eng) некорректно - батник пишет что файлы промувил, а они так и остались лежать на месте, папка при этом не создалась. |
|||
Последний раз редактировалось finderhd, 21-01-2020 в 13:25. Отправлено: 13:04, 21-01-2020 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|