surgutfred
31-10-2018, 14:00
Добрый день.
Есть 2 файлопомойки:
1 С кучей безсистемных папок и в них куча папок с множеством файлов *.usr созданные в разные года.
2 С некоторой системой типа \2018\09.2018\03.09.2018\CONS#64_896377#2018_09_03#13_14_57\CONS#64_896377.USR (жирным скажем так не нужная мне папка, и кроме целевых там еще есть "лишние файлы")
Много файлов с одинаковыми именами, но от разных дат
Хочу разложить по полочкам, т.е. смотрим дату создания файла *.usr, на полочке создаем 2016\08\23 и туда копируем все файлы созданные в эту дату.
Решил так (извините за топорность, я не волшебник, я только учусь):
rem Смотрит дату USR и копирует в архив в папку по дате
@Echo Off
del /q G:\BackUp\USR_Archive\log.txt
rem Каталог с помойкой USR
set katalog=Y:\USR\
rem Каталог куда ложим USR с разбивкой по периодам
set ArchPath=G:\BackUp\USR_Archive\USR_ALL\
rem Ищем в заданном каталоге и вложенных все файлы *.USR
rem обязательно параметр %%a в кавычках "%%a" иначе некорректно обработает пути с пробелами
For /r %katalog% %%a In (*.usr) Do @Call :Period "%%a" %%~ta
rem Теперь каталог с USR интернетчиков
set katalog=F:\USR_Archive\INET\
rem обязательно параметр %%a в кавычках "%%a" иначе некорректно обработает пути с пробелами
For /r %katalog% %%a In (*.usr) Do @Call :Period "%%a" %%~ta
GoTo :EOF
rem Определяем дату изменения файла usr, т.е. дату обновления
:Period
Set f_Nam=%1
Set f_Name=%f_Nam: =%
Set f_Dat=%2
Set f_Date=%f_Dat: =%
Set f_Day1=%f_Date:~0,2%
Set f_Day=%f_Day1: =%
Set f_Month1=%f_Date:~3,2%
Set f_Month=%f_Month1: =%
Set f_Year1=%f_Date:~6,4%
Set f_Year=%f_Year1: =%
rem Копируем USR в соответствующий период Архив\Год\Месяц
xcopy /y %f_Name% %ArchPath%\%f_Year%\%f_Month%\%f_Day%\ /d /f >> G:\BackUp\USR_Archive\log.txt
GoTo :EOF
Вроде все работает и копирует, но в конце вылетает с ошибкой xcopy, все файлы не успевает скопировать
Подозреваю что слишком длинные пути получаются.
Пробовал перевести на robocopy, но что то не срастается.
rem Смотрит дату USR и копирует в архив в папку по дате
@Echo Off
del /q G:\BackUp\USR_Archive\log.txt
rem Теперь каталог с USR интернетчиков
set katalog=C:\FTP\1
rem Каталог куда ложим USR с разбивкой по периодам
set ArchPath=C:\FTP\2
rem обязательно параметр %%a в кавычках "%%a" иначе некорректно обработает пути с пробелами
For /r %katalog% %%a In (*.usr) Do @Call :Period "%%~nxa" "%%~dpa" %%~ta
GoTo :EOF
rem Определям дату измеения файла usr, т.е. дату обновления
:Period
Set f_Put=%~2
Set f_Nam=%~1
Set f_Name=%f_Nam: =%
Set f_Dat=%3
Set f_Date=%f_Dat: =%
Set f_Day1=%f_Date:~0,2%
Set f_Day=%f_Day1: =%
Set f_Month1=%f_Date:~3,2%
Set f_Month=%f_Month1: =%
Set f_Year1=%f_Date:~6,4%
Set f_Year=%f_Year1: =%
rem Копируем USR в соотвествующий период Архив\Год\Месяц
robocopy %f_Put% %ArchPath%\%f_Year%\%f_Month%\%f_Day% %f_Name% >> C:\FTP\log.txt
GoTo :EOF
Если так то копирует как надо, но только если в пути нет пробела
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Начало: 31 октября 2018 г. 15:31:55
Источник : C:\FTP\1\3\
Назначение : C:\FTP\2\2016\02\01\
Файлы: CONS#1_005650.USR
Параметры: /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
, если только папка с пробелом, не копирует. Например папка АТ СИНИТИ
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Начало: 31 октября 2018 г. 15:31:55
Источник - C:\FTP\1\АТ\
Назначение - C:\FTP\Синити\
Файлы:
Параметры: /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
ОШИБКА: Недопустимый параметр #3 : "C:\FTP\2\2015\08\18"
Как допилить ? Или альтернативный вариант предложите
Есть 2 файлопомойки:
1 С кучей безсистемных папок и в них куча папок с множеством файлов *.usr созданные в разные года.
2 С некоторой системой типа \2018\09.2018\03.09.2018\CONS#64_896377#2018_09_03#13_14_57\CONS#64_896377.USR (жирным скажем так не нужная мне папка, и кроме целевых там еще есть "лишние файлы")
Много файлов с одинаковыми именами, но от разных дат
Хочу разложить по полочкам, т.е. смотрим дату создания файла *.usr, на полочке создаем 2016\08\23 и туда копируем все файлы созданные в эту дату.
Решил так (извините за топорность, я не волшебник, я только учусь):
rem Смотрит дату USR и копирует в архив в папку по дате
@Echo Off
del /q G:\BackUp\USR_Archive\log.txt
rem Каталог с помойкой USR
set katalog=Y:\USR\
rem Каталог куда ложим USR с разбивкой по периодам
set ArchPath=G:\BackUp\USR_Archive\USR_ALL\
rem Ищем в заданном каталоге и вложенных все файлы *.USR
rem обязательно параметр %%a в кавычках "%%a" иначе некорректно обработает пути с пробелами
For /r %katalog% %%a In (*.usr) Do @Call :Period "%%a" %%~ta
rem Теперь каталог с USR интернетчиков
set katalog=F:\USR_Archive\INET\
rem обязательно параметр %%a в кавычках "%%a" иначе некорректно обработает пути с пробелами
For /r %katalog% %%a In (*.usr) Do @Call :Period "%%a" %%~ta
GoTo :EOF
rem Определяем дату изменения файла usr, т.е. дату обновления
:Period
Set f_Nam=%1
Set f_Name=%f_Nam: =%
Set f_Dat=%2
Set f_Date=%f_Dat: =%
Set f_Day1=%f_Date:~0,2%
Set f_Day=%f_Day1: =%
Set f_Month1=%f_Date:~3,2%
Set f_Month=%f_Month1: =%
Set f_Year1=%f_Date:~6,4%
Set f_Year=%f_Year1: =%
rem Копируем USR в соответствующий период Архив\Год\Месяц
xcopy /y %f_Name% %ArchPath%\%f_Year%\%f_Month%\%f_Day%\ /d /f >> G:\BackUp\USR_Archive\log.txt
GoTo :EOF
Вроде все работает и копирует, но в конце вылетает с ошибкой xcopy, все файлы не успевает скопировать
Подозреваю что слишком длинные пути получаются.
Пробовал перевести на robocopy, но что то не срастается.
rem Смотрит дату USR и копирует в архив в папку по дате
@Echo Off
del /q G:\BackUp\USR_Archive\log.txt
rem Теперь каталог с USR интернетчиков
set katalog=C:\FTP\1
rem Каталог куда ложим USR с разбивкой по периодам
set ArchPath=C:\FTP\2
rem обязательно параметр %%a в кавычках "%%a" иначе некорректно обработает пути с пробелами
For /r %katalog% %%a In (*.usr) Do @Call :Period "%%~nxa" "%%~dpa" %%~ta
GoTo :EOF
rem Определям дату измеения файла usr, т.е. дату обновления
:Period
Set f_Put=%~2
Set f_Nam=%~1
Set f_Name=%f_Nam: =%
Set f_Dat=%3
Set f_Date=%f_Dat: =%
Set f_Day1=%f_Date:~0,2%
Set f_Day=%f_Day1: =%
Set f_Month1=%f_Date:~3,2%
Set f_Month=%f_Month1: =%
Set f_Year1=%f_Date:~6,4%
Set f_Year=%f_Year1: =%
rem Копируем USR в соотвествующий период Архив\Год\Месяц
robocopy %f_Put% %ArchPath%\%f_Year%\%f_Month%\%f_Day% %f_Name% >> C:\FTP\log.txt
GoTo :EOF
Если так то копирует как надо, но только если в пути нет пробела
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Начало: 31 октября 2018 г. 15:31:55
Источник : C:\FTP\1\3\
Назначение : C:\FTP\2\2016\02\01\
Файлы: CONS#1_005650.USR
Параметры: /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
, если только папка с пробелом, не копирует. Например папка АТ СИНИТИ
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Начало: 31 октября 2018 г. 15:31:55
Источник - C:\FTP\1\АТ\
Назначение - C:\FTP\Синити\
Файлы:
Параметры: /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
ОШИБКА: Недопустимый параметр #3 : "C:\FTP\2\2015\08\18"
Как допилить ? Или альтернативный вариант предложите