Показать полную графическую версию : [решено] Раскидать файлы по папкам согласно дате в имени файла
Есть папка, где куча файлов, надо раскидать по папкам (создавая папки) согласно дате в имени файла
Имена файлов _ГГГГММДДЧЧССММ.jpg (пример: _20100401080242.jpg)
Нужное имя папки ГГГГММДД (пример: 20100410)
раскидать по папкам »Команда "раскидать" заменена на "Copy"
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder=e:\Temp\Source
:: папка назначения
Set Out=e:\Temp\jpg
For /R "%Folder%" %%i In (*.jpg) Do (
Set ti=%%~ni
MD "%Out%\!ti:~1,8!" 2>Nul
Copy "%%i" "%Out%\!ti:~1,8!">Nul
)
Pause>Nul
megaloman
11-11-2011, 20:06
Если "раскидать" - это переместить, не создавая дубликата файла, то логичнее Copy заменить нa Move, и перемещать не по 1 файлу, а группой по маске (по дате). Цикл For у gora тогда можно переписать в видеFor /R "%Folder%" %%i In (*.jpg) Do (
IF EXIST "%%i" (
Set name=%%~ni
Set mask=!name:~1,8!
MD "%Out%\!mask!"
Move "%%~dpi?!mask!*%%~xi" "%Out%\!mask!\"
)
)
Ежели файлы всё же надо копировать, а не перемещать, то для копирования группой по маске For у gora можно переписать в виде For /R "%Folder%" %%i In (*.jpg) Do (
Set name=%%~ni
Set mask=!name:~1,8!
IF Not EXIST "%Out%\!mask!\*.*" MD "%Out%\!mask!"
IF Not EXIST "%Out%\!mask!\%%~nxi" Copy "%%~dpi?!mask!*%%~xi" "%Out%\!mask!\"
)
При повторном запуске этого батника перезапись уже скопированных файлов не производится
Господа, поможите...
Нужно примерно то же самое, но:
1) дату нужно брать из атрибутов файла
2) имя создаваемых каталогов - "ДД-ММ" (и не спрашивайте, почему такое дурацкое имя. исторически сложилось)
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder=e:\Temp\Source
:: папка назначения
Set Out=e:\Temp\jpg
For /R "%Folder%" %%i In (*.jpg) Do (
Set tim=%%~ti
Set tim=!tim:~0,5!
Set tim=!tim:.=-!
If Not Exist "%Out%\!tim!" MD "%Out%\!tim!"
Copy "%%~i" "%Out%\!tim!">Nul
)
Так... Условия задачи поменялись :blush2:
Файлы текстовые, содержимое (текст) каждого файла начинается с даты в формате DDMMYYYY. Т.е. первая строка выглядит как-то так:
30082012|#|08606|0004.......
Необходимо раскидать по тому же принципу, что и в задаче выше.
С меня пиво :)
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder=e:\Temp\Source
:: папка назначения
Set Out=e:\Temp\jpg
For /R "%Folder%" %%a In (*.txt) Do (
Set flag=
For /F "usebackq tokens=* delims=" %%i In ("%%a") Do (
If Not Defined flag (
Set flag=1
Set tim=%%i
Set tim=!tim:~0,2!-!tim:~2,2!
If Not Exist "%Out%\!tim!" MD "%Out%\!tim!"
Copy "%%a" "%Out%\!tim!"
)
)
)
:yahoo: Спасибо! Вы меня очень сильно выручили! :Beer:
Уважаемый megaloman!
Помогите победить проблему- в приведенном ниже примере, в случае присутствия пробелов в названии папки из которой запускается батник - он не срабатывает(( , а если пробелов нет, то все ОК.
Т.е. если папка "Январь 22" - не сработает, а если "Январь", то все хорошо.
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder="%cd%"
:: папка назначения
Set Out="%cd%"
For /R "%Folder%" %%i In (*.*) Do (
Set ti=%%~ni
MD "%Out%\!ti:~0,100!"
Move "%%i" "%Out%\!ti:~0,100!">Nul
)
Pause>Nul
megaloman
23-02-2022, 12:30
4zz, Попробуйте переставить кавычки:: Обрабатываемая папка
Set "Folder=%cd%"
:: папка назначения
Set "Out=%cd%"
И лучше бы Вы сформулировали Вашу задачу для оптимального решения
лучше бы »
лучше бы не использовать для работы с перемещением файлов одну и ту же папку и очень желательно при этом сам bat держать также не в папке где обрабатываются файлы.
Попробуйте переставить кавычки »
Ура! поехало!))
Спасибо!)
И лучше бы Вы сформулировали Вашу задачу для оптимального решения »
Задача простая - есть много файлов - счета за месяц обозванные по номерам домов или фамилиям, их нужно разбросать по одноименным папкам, чтобы чуть позже дополнить эти папки другими файлами этих же собственников/домов.
А может можно как-то упростить/автоматизировать дополнительно?
Допустим есть файлы test и test1 - это один и тот же собственник, просто разные счета - их нужно в одну папку - в моем варианте я батником создаю папки для счетов типа test и отдельно папки для счетов типа test1 применив к их созданию MD "%Out%\!ti:~0,-1%!", т.е. убираю единичку и создаю те же папки, что и в первом случае, но в другом месте, а потом вручную переношу (совмещаю) однотипные папки. Получаю, например папку TEST и в ней файлы test и test1
Надо конкретика, а не абстракция »
Приложил рисунки:
1.Был список файлов
2.Образованы папки
3. Список файлов в папках
megaloman
24-02-2022, 00:23
@Echo Off
cls
>nul Chcp 1251
Set "BoxIn=Z:\Users\Users\Desktop\Февраль 2022"
rem Set "BoxIn=%~dp0"
Set "BoxOut=%BoxIn%"
Set "Ext=xlsx"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"
If "%BoxOut:~-1%"=="\" Set "BoxOut=%BoxOut:~0,-1%"
For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*.%Ext%" /B /A:-D ^| FindStr/I /R /V /C:"^.*([0-9]*)\.%Ext%$"`) Do (
2>nul Md "%BoxOut%\%%~nf"
>nul Move "%BoxIn%\%%f" "%BoxOut%\%%~nf\"
>nul Move "%BoxIn%\%%~nf(*)%%~xf" "%BoxOut%\%%~nf\"
)
Exit /B
Путь к входной и выходной папке укажите свой. Я здесь указал их одинаковыми. Если батник в исходной папке, уберите rem
megaloman,
ВЫ ВОЛШЕБНИК!!!
СПАСИБО!!! СУПЕР!!!)))
Julia111
23-01-2024, 16:26
Доброго дня! Помогите , пожалуйста, создать скрипт.
Есть файлы у которых название начинается с индексов «420004 …. 420005 …. 420021 … И так далее»
Подскажите как для каждого файла создать папку? Чтобы и файл туда переместился.
megaloman
24-01-2024, 16:03
@Echo Off &cls
>nul Chcp 1251
Set "BoxIn=Z:\Box_In"
Set "Mask=42*.*"
Set "BoxOut=Z:\Box_In"
For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D ^| FindStr /I /R /B /C:"[0-9][0-9][0-9][0-9][0-9][0-9]"`) Do (
If Exist "%BoxIn%\%%f" (
Set "Name=%%f"
2>nul Call MD "%BoxOut%\%%Name:~0,6%%"
>nul Call Move /Y "%BoxIn%\%%Name:~0,6%%*.*" "%BoxOut%\%%Name:~0,6%%\"
)
)
pause
Exit /B
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.