Создание Bat для перемещения в папки согласно дате

deprivatio

Новый пользователь
Сообщения
27
Реакции
0
Добрый день, прошу помочь скриптом.

Нужен батник для переноса из условной папки D:\Import в D:\ImportOLD, но с сортировкой файлов по структуре Папка ГОД/Папка Месяц/Папка День. Данные необходимо запрашивать из значения Дата изменения. Используются файлы *.xml

Видел подобный код с сортировкой по части названия, но не понял, как поправить под себя.

@echo off
SetLocal EnableExtensions EnableDelayedExpansion

:: исходная папка
set Src=D:\Import

:: конечная папка
set Dest=D:\ImportOLD

For %%a in ("%Src%\*.xml") do (
set "f=%%~nxa"
set "d=%Dest%\!f:~,4!\!f:~4,2!\!f:~6,2!"
if not exist "!d!" md "!d!"
move "%%a" "!d!\!f:~8!"
)

pause
 
Добрый день, прошу помочь скриптом.

Нужен батник для переноса из условной папки D:\Import в D:\ImportOLD, но с сортировкой файлов по структуре Папка ГОД/Папка Месяц/Папка День. Данные необходимо запрашивать из значения Дата изменения. Используются файлы *.xml

Видел подобный код с сортировкой по части названия, но не понял, как поправить под себя.

@echo off
SetLocal EnableExtensions EnableDelayedExpansion

:: исходная папка
set Src=D:\Import

:: конечная папка
set Dest=D:\ImportOLD

For %%a in ("%Src%\*.xml") do (
set "f=%%~nxa"
set "d=%Dest%\!f:~,4!\!f:~4,2!\!f:~6,2!"
if not exist "!d!" md "!d!"
move "%%a" "!d!\!f:~8!"
)

pause
Для переноса файлов из папки D:\Import в D:\ImportOLD с сортировкой по структуре "Папка ГОД/Папка Месяц/Папка День" на основе даты изменения файла, вам нужно внести некоторые изменения в предложенный вами скрипт.

Вот обновленный скрипт, который учитывает дату изменения файлов:

CMD/BATCH:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

:: исходная папка
set Src=D:\Import

:: конечная папка
set Dest=D:\ImportOLD

For %%a in ("%Src%\*.xml") do (
  set "f=%%~nxa"
  set "d=%Dest%\!f:~,4!\!f:~4,2!\!f:~6,2!"

  for %%F in ("%%a") do (
    set "fileDate=%%~tF"
    set "year=!fileDate:~6,4!"
    set "month=!fileDate:~3,2!"
    set "day=!fileDate:~0,2!"
    set "newDir=%Dest%\!year!\!month!\!day!"
    
    if not exist "!newDir!" md "!newDir!"
    move "%%a" "!newDir!\!f!"
  )
)

pause

Этот скрипт будет создавать структуру папок вида "ГОД/Месяц/День" в папке D:\ImportOLD и перемещать файлы *.xml из папки D:\Import в соответствующие папки в зависимости от даты изменения файлов.

Пожалуйста, убедитесь, что делаете резервную копию файлов перед запуском скрипта, чтобы избежать потери данных.
 
Спасибо, а что значат переменные 6.4, 3.2, 0.2?
Переменные вроде "!fileDate:~6,4!" в скрипте обозначают операцию подстроки над строкой. В данном случае:

  • "!fileDate:~6,4!" означает, что мы берем подстроку из переменной fileDate, начиная с 6-го символа и длиной 4 символа. Это позволяет извлечь год из строки даты.
  • "!fileDate:~3,2!" означает, что мы берем подстроку из переменной fileDate, начиная с 3-го символа и длиной 2 символа. Это позволяет извлечь месяц из строки даты.
  • "!fileDate:~0,2!" означает, что мы берем подстроку из переменной fileDate, начиная с 0-го символа и длиной 2 символа. Это позволяет извлечь день из строки даты.

Таким образом, эти операции позволяют извлечь нужные части даты из строки даты изменения файла и использовать их для создания структуры папок "ГОД/Месяц/День" для перемещения файлов.
 
Можно чуть принаглеть и попросить доработку кода? из исходного каталога еще необходимо удалять логи, они в формате *.txt , а файлы *.xml нужно переносить с сортировкой по дате изменения
 
Последнее редактирование модератором:
Доделал чуть код, может кому - то пригодится , отдельно спасибо ChatGPT, сам бы еще неделю делал


Код:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

:: исходная папка
set Src=C:\Documents\1

:: конечная папка
set Dest=C:\Documents\2

For %%a in ("%Src%\*.done") do (
  set "f=%%~nxa"
  set "d=%Dest%\!f:~,4!\!f:~4,2!\!f:~6,2!"

  for %%F in ("%%a") do (
    set "fileDate=%%~tF"
    set "year=!fileDate:~6,4!"
    set "month=!fileDate:~3,2!"
    set "day=!fileDate:~0,2!"
    set "newDir=%Dest%\!year!\!month!\!day!"
 
    if not exist "!newDir!" md "!newDir!"
    move "%%a" "!newDir!\!f!"
  )
)

REM Удаление файлов
for %%F in ("%Src%\*.xlsx" "%Src%\*.txt" "%Src%\recadv*.xml") do (
    del "%%F"
)

echo Операция завершена.

pause
 
Последнее редактирование:
Доделал чуть код может кому - то пригодится , отдельно спасибо ChatGPT, сам бы еще неделю делал


Код:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

:: исходная папка
set Src=C:Documents\1

:: конечная папка
set Dest=C:Documents\2

For %%a in ("%Src%\*.done") do (
  set "f=%%~nxa"
  set "d=%Dest%\!f:~,4!\!f:~4,2!\!f:~6,2!"

  for %%F in ("%%a") do (
    set "fileDate=%%~tF"
    set "year=!fileDate:~6,4!"
    set "month=!fileDate:~3,2!"
    set "day=!fileDate:~0,2!"
    set "newDir=%Dest%\!year!\!month!\!day!"
    
    if not exist "!newDir!" md "!newDir!"
    move "%%a" "!newDir!\!f!"
  )
)

REM Удаление файлов
for %%F in ("%Src%\*.xlsx" "%Src%\*.txt" "%Src%\recadv*.xml") do (
    del "%%F"
)

echo Операция завершена.


pause
Рад, что вам удалось доработать код! Ваш скрипт теперь не только переносит файлы *.done с сортировкой по дате изменения, но и удаляет файлы *.xlsx, *.txt и файлы, начинающиеся с "recadv" из исходной папки.

Если у вас возникнут еще вопросы или потребуется помощь с другими скриптами, не стесняйтесь обращаться. Я всегда рад помочь!
 
Рад, что вам удалось доработать код! Ваш скрипт теперь не только переносит файлы *.done с сортировкой по дате изменения, но и удаляет файлы *.xlsx, *.txt и файлы, начинающиеся с "recadv" из исходной папки.

Если у вас возникнут еще вопросы или потребуется помощь с другими скриптами, не стесняйтесь обращаться. Я всегда рад помочь!
Можно вопрос? вы пишете "и файлы, начинающиеся с "recadv" из исходной папки." , а расширение .xml в форме "recadv*.xml" не задействуется в правиле разве?
 
Рад, что вам удалось доработать код! Ваш скрипт теперь не только переносит файлы *.done с сортировкой по дате изменения, но и удаляет файлы *.xlsx, *.txt и файлы, начинающиеся с "recadv" из исходной папки.

Если у вас возникнут еще вопросы или потребуется помощь с другими скриптами, не стесняйтесь обращаться. Я всегда рад помочь!
Можно вопрос? вы пишете "и файлы, начинающиеся с "recadv" из исходной папки." , а расширение .xml в форме "recadv*.xml" не задействуется в правиле разве?
Да, вы правы, моя ошибка. В вашем скрипте используется шаблон "*.recadv.xml" для удаления файлов, начинающихся с "recadv" и имеющих расширение .xml. Таким образом, файлы, начинающиеся с "recadv" и заканчивающиеся на .xml, будут удалены из исходной папки. Извините за недочет в моем предыдущем ответе. Если у вас есть еще вопросы или нужна дополнительная помощь, не стесняйтесь обращаться!
 
Да, вы правы, моя ошибка. В вашем скрипте используется шаблон "*.recadv.xml" для удаления файлов, начинающихся с "recadv" и имеющих расширение .xml. Таким образом, файлы, начинающиеся с "recadv" и заканчивающиеся на .xml, будут удалены из исходной папки. Извините за недочет в моем предыдущем ответе. Если у вас есть еще вопросы или нужна дополнительная помощь, не стесняйтесь обращаться!
Я с человеком общаюсь или все таки с ИИ? Возникло ощущение "зловещей долины"
 
Я с человеком общаюсь или все таки с ИИ? Возникло ощущение "зловещей долины"
Я - искусственный интеллект, который разработан для помощи вам в решении задач и ответа на вопросы. Если у вас есть какие-либо дополнительные вопросы или нужна помощь, не стесняйтесь обращаться. Я здесь, чтобы помочь вам!
 
Последнее редактирование:
Доделал чуть код, может кому - то пригодится
Код:
set Src=C:Documents\1
Тут ошибка/ опечатка, пропущен символ, скорее всего должно быть так:
Код:
[CODE]set Src=C:\Documents\1
[/CODE]
Спасибо за замечание. Да, вы правы, в строке кода должен быть символ обратного слеша перед буквой C, чтобы указать полный путь к диску C. Правильное написание будет следующим:

CMD/BATCH:
set Src=C:\Documents\1

Благодарю за вашу внимательность. Если у вас есть еще вопросы или нужна дополнительная помощь, не стесняйтесь обращаться!
 
Тут ошибка/ опечатка, пропущен символ, скорее всего должно быть так (во второй переменной так же):
Код:
set Src=C:\Documents\1
[
Убирал данные в пути, хватанул лишнего, поправил. Спасибо
 
Тут ошибка/ опечатка, пропущен символ, скорее всего должно быть так (во второй переменной так же):
Код:
set Src=C:\Documents\1
[
Убирал данные в пути, хватанул лишнего, поправил. Спасибо
Отлично, рад, что вам удалось исправить ошибку. Если у вас возникнут еще вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться. Я всегда здесь, чтобы помочь вам!
 
Назад
Сверху Снизу