Показать полную графическую версию : [решено] Перемещение файлов по маске
megaloman
21-01-2020, 14:13
Не совсем ясно, куда это вставить? Я не вижу ранее в батнике OldYear »Потому что Вы смотрите не тот батник. Надо вот этот (http://forum.oszone.net/post-2905519-17.html) Там надо изменить одну строку:
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
21-01-2020, 15:57
Потому что Вы смотрите не тот батник. Надо вот этот Там надо изменить одну строку: »
Я именно его и использую, всё отлично, но когда меняю Set /A Y=%Year%+%%i на Set /A OldYear=%Year%-5, то конкретно на WinServer 2012 он не работает, а на моем компе с Win7 работает безупречно. Вот и возникли подозрения, что у рус версии винды год то идет в конце даты, а в английской спереди, в системном плане, так то на панели инструментов время показывает как одинаково.
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
Хотелось бы это написанное увидеть. »
Уточняю, там было написано "3 files moved". но по факту они остались лежать там же. Чуть позже воспроизведу и сделаю скрин.
megaloman
21-01-2020, 17:02
Такое ощущение, что у нас разговор на разные темы, мы обсуждаем разные батники и Вы меня не слышите. Я ссылаюсь на один (кстати, я бы его не стал делать, если бы Вы не предъявляли претензий, что файлы 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"
finderhd
28-01-2020, 16:48
Только что проверил этот батник просто поменяв пути на свои - не работает он на WinServer 2012, на моей 7-ке винде - работает, и 2019 год папка лишняя не создается, если проверять. А вот на серваке - ничего не происходит, даже ошибку не выдает. Папка 2020 не создается, файлы остаются лежать там же где и лежали.
megaloman
28-01-2020, 18:10
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
Пути, естественно, пропишИте свои.подозреваю, указываете неверные пути, или к ним нет доступа
finderhd
12-02-2020, 10:21
подозреваю, указываете неверные пути, или к ним нет доступа »
Добрый день! Извините за столь долгий ответ. Точно, была лишняя папка в путях. Теперь всё работает как надо! Спасибо!
PS. Подумал еще про один момент, что данный скриптик может быть очень полезен для других задачек, где потребуется распределение и остальных файлов, по годам создания. Пока такой необходимости прям нет, но может же пригодиться.
Если Вам не сложно, будьте добры, подскажите, что нужно добавить в скрипт, чтобы и по остальным годам создавались папки и перемещались туда файлы (чтобы скрипт смотрел именно дату создания/изменения)?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC