PDA

Показать полную графическую версию : Поиск и переименование файлов с помощью BATника


Страниц : 1 2 [3]

ovrtke
16-09-2021, 08:37
megaloman, что то не видит совсем файлы (

megaloman
16-09-2021, 08:59
ovrtke, я предполагал такую структуру:
Папка
Папка 1
файлы или есть или нет
Папка 1.1
файлы или есть или нет
Папка 1.1.1
.....................
Папка 2
файлы или есть или нет
Папка 2.1
файлы или есть или нет
Папка 2.1.1
......
Переименование корневой папки и обработка файлов в ней не предполагалось. В корневой Папке должны быть подпапки.

ovrtke
16-09-2021, 09:09
Папка - не трогаем
Папка 1 - переименовываем
файлы или есть или нет
Папка 1.1
файлы или есть или нет
Папка 1.1.1
.....................
примерно так сейчас ?

megaloman
16-09-2021, 09:31
ovrtke, а если так ? » Можно, но нельзя :). Я не знаю, зачем Вам скрипт. Но у Вас имя корневой папки прописано в батнике. И, если оно изменится после обработки, то при следующем запуске батника она найдена не будет, или ручками придётся ее перепрописать в коде - полный угар.

DJ Mogarych
16-09-2021, 09:56
Я не знаю, зачем Вам скрипт. »
Автор темы, по всей видимости, тоже.

ovrtke
16-09-2021, 10:16
megaloman, спасибо, чуток допилил, все работает, все огонь!
DJ Mogarych, спасибо за уточнение, но нет, знаю) просто когда есть бета версия одного файла всегда найдутся те которые хотят чучуть дороботать и улучшить, и изменить вводные данные которые были изначально. Но все получилось, еще раз огромаднейшее комраду megaloman за содействие и помощь в оказании написания сего батника

megaloman
16-09-2021, 11:08
ovrtke, @Echo Off
cls
>nul Chcp 1251
Set "BoxIn=Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ"

Set Mask="*.xlsx" "*.doc" "*.txt"
Set "DateMask=^[2-9][0-9][0-1][0-9][0-3][0-9] .*"

Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 1)

Echo +++ Processing files Mask=%Mask% Folder="%BoxIn%"

FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "MyDate=%%d" &Call Set "MyDate=%%MyDate:~2,6%% "

Set /A Ntotal=0
For /F "usebackq delims=" %%d In (`2^>nul Dir "%BoxIn%\*.*" /B /A:D /S ^|Sort /R`) Do (
Set /A Na=0
Call :ReFiles "%%d" "%Mask%" "Ni"
)
Call :ReFiles "%BoxIn%" "%Mask%" "Ni"
Popd

Echo === Changed %NTotal% files today. Folder="%BoxIn%" Mask=%Mask%
pause
Exit /B 0

:ReFiles
Set /A N=0
Pushd "%~1" ||Exit /B 0
For /F "usebackq delims=" %%f In (`2^>nul Dir %~2 /B /A:-D /O:-D /T:W`) Do (
For /F "delims= " %%d In ("%%~tf") Do (
If "%Date%"=="%%d" (
Set "Name=%%f"
Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%"
>nul Call ReName "%~1\%%f" "%MyDate%%%Name%%"
Call Set /A N+=1
Call Echo %%N%% "%~1\%%f" "--->""%MyDate%%%Name%%"
) Else (GoTo :Continue)
)
)
:Continue
Set /A %~3=%N%
Set /A NTotal+=%N%
Popd
If Exist "%~1\%MyDate%*.*" Call :Redir %1
Exit /B 0

:ReDir
Set "Name=%~nx1"
Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%"
>nul Call ReName %1 "%MyDate%%%Name%%" &&Call Echo === "%~nx1" "--->""%MyDate%%%Name%%" ||Echo ??? %1
Exit /B 0
Файлы в корневой папке переименовывываются, а сама папка нет. Добавил всего одну строку. Элементарно сделать , чтобы и папка переименовывалась, но это уже обсудили.

ovrtke
16-09-2021, 12:20
Шолом-Алейхем: "Если нельзя, но очень хочется, то можно"

Круто! Спасибо




© OSzone.net 2001-2012