[CMD] Скриншоты и нумерация в BAT

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
Здравствуйте.

Нужен BAT для скриншота, нумерации, и работа с папкой.
Пример:
- Сперва создаётся скриншот в папке, формата .png, далее, идёт нумерация: screenshot_0.png, screenshot_1.png, и т.д.
- Если например, сделано скриншотов 10 шт, далее, если нужно удалить или переместить такой порядок номер скриншотов: 1, 2, 3, 4, 5, и после 5 остались файлы с номером: 6, 7, 8, 9, 10, то нумерация идёт дальше от 10, так как screenshot_10.png последний снимок в папке с номером 10, и нумеруется так: 11, 12, 13, 14, и т.д.
- Если отсутствуют например, снимки с номером: 6, 7, 8, 9, 10, а остались 1, 2, 3, 4, 5, то нумерация идёт дальше от 5, так как screenshot_5.png последний снимок в папке с номером 5, и нумеруется так: 6, 7, 8, 9, и т.д.
- Когда есть такой порядок: 1, 2, 3, 6, 7, 8, например, то нумерация идёт дальше от 8, так как screenshot_8.png последний снимок в папке с номером 8, и нумеруется так: 9, 10, 11, 12, и т.д.
- Если будут все удалены или просто перемещены файлы .png из папки куда сохраняются скриншоты, то нумерация снова идёт заново с 0, и т.д.
- Скриншоты с нумерацией файлов сохраняются в отдельную папку, например, "скриншоты", в папке программы C:\Прога\скриншоты
- При отсутствии папки "скриншоты", происходит проверка, BAT определяет на отсутствие папки, если её нет в папке программы, то один раз её создаст. Это действие выполняется первым.
- Скриншоты с папкой и программой работают вне зависимости директории Windows.
- Когда BAT выполнит свой скрипт, он закроется при завершении.

Сможете помочь это сделать?

// Замечание модератора. Текст отредактирован по просьбе автора.
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Вам нужнен батник для перенумерации? По типу 1, 2, 6, 7 => 1, 2, 3, 4 ?
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
Dragokas, Нет, не совсем так. Если есть: 1, 2, 6, 7 => 8, 9, 10, 11 и так далее.
Вы сможете помочь?
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,808
Реакции
6,100
Баллы
1,008
@Rinat просто из вашего описания не понятно. Вот у вас появился скриншот .png как понять, что его надо переименовывать, а какие нет?
Вот screenshot_5.png - это тоже скриншот .png, но его переименовывать не надо.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Если не пойму, что нужно, то и не смогу помочь.

CMD/BATCH:
@echo off
setlocal enableextensions enabledelayedexpansion

set max=0
for /f "tokens=1-2 delims=_" %%a in ('dir /b /a-d screenshot_*.png') do if "%%~nb" neq "" (if %%~nb GTR !max! set max=%%~nb)
set /a max+=1
move screenshot_.png screenshot_%max%.png

pause

Батник должен лежать рядом со скриншотами.
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
@regist Если например, в папке есть скриншот с названием и без номера, как screenshot_.png. Батник работает так: он сперва обнаруживает полное название файла screenshot_.png. Далее, если в папке есть screenshot_.png, то нумерует поочерёдно - screenshot_1.png, screenshot_2.png и т.д. Dragokas, сделал верно, только нумерация идёт от 1, а не от 0. Переименование идёт с нумерацией.
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
Если не пойму, что нужно, то и не смогу помочь.

CMD/BATCH:
@echo off
setlocal enableextensions enabledelayedexpansion

set max=0
for /f "tokens=1-2 delims=_" %%a in ('dir /b /a-d screenshot_*.png') do if "%%~nb" neq "" (if %%~nb GTR !max! set max=%%~nb)
set /a max+=1
move screenshot_.png screenshot_%max%.png

pause

Батник должен лежать рядом со скриншотами.
@Dragokas Да, то что надо! Пожалуйста, сделайте чтобы нумерация шла от 0, а не от 1? Ещё нужно так: Папка программы\скриншоты, то есть батник должен работать в Папке программы, но не в папке скриншотов. Только вот ещё добавил ожидание на 2 сек. перед выполнением, чуть изменил код. Правильно timeout размещён в пункте и записан?

CMD/BATCH:
@echo off
setlocal enableextensions enabledelayedexpansion

timeout /t 2 /nobreak >nul

set max=0
for /f "tokens=1-2 delims=_" %%a in ('dir /b /a-d screenshot_*.png') do if "%%~nb" neq "" (if %%~nb GTR !max! set max=%%~nb)
set /a max+=1
move screenshot_.png screenshot_%max%.png
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Папка программы\скриншоты, то есть батник должен работать в Папке программы, но не в папке скриншотов.
Я не понимаю, что это означает. Куда положите, там и будет работать.
Правильно timeout размещён в пункте и записан?
без понятия.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Так?

CMD/BATCH:
@echo off
setlocal enableextensions enabledelayedexpansion

set "folder=скриншоты"

timeout /t 2 /nobreak >nul

set max=-1
pushd "%folder%"
for /f "tokens=1-2 delims=_" %%a in ('dir /b /a-d screenshot_*.png') do if "%%~nb" neq "" (if %%~nb GTR !max! set max=%%~nb)
set /a max+=1
move screenshot_.png screenshot_%max%.png
popd

Скрипт нужно сохранить в кодировке OEM-866.
UPD. Исправил.
 
Последнее редактирование:

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
@Dragokas Работает отлично! Можно чтобы была ещё доп. проверка? Если папка с названием "скриншоты" отсутствует, то чтобы создалась один раз. Эта проверка должна наверное работать до нумерации картинок. Чтобы типа код успевал срабатывать. Вам виднее, наверное, и как лучше. Сможете ещё и это помочь внести в батник?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Создать папку:
Код:
md "%folder%" 2>NUL
ну или в произвольном месте других ваших скриптов:
Код:
md "%~dp0скриншоты" 2>NUL
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
Спасибо! Вопрос решён.
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
@Dragokas Нужно ещё кое что доработать. Нужно после чёрточки в таком содержании файла screenshot_0.png копировалась только цифра 0 в буфер обмена. Если появляется следующая последовательность screenshot_1.png, то копировать уже цифру 1, и так далее, чтобы любые все числа больших и малых содержания копировались. Помогите это доработать?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Код:
echo %max%|clip
?
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
@Dragokas Больше 9 номера не копируется в буфер обмена.

CMD/BATCH:
set "pt=screenshots\screenshot_*.png"
for %%a in ("%pt%") do set "x=%%~na"
echo %x:~11%|clip
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,483
Реакции
5,945
Баллы
798
Что именно не работает?
После исполнения сценария в буфер попадёт число, соответствующее переименованному файлу.

Код:
@echo off
setlocal enableextensions enabledelayedexpansion

set "folder=скриншоты"

md "%folder%" 2>NUL
timeout /t 2 /nobreak >nul

set max=-1
pushd "%folder%"
for /f "tokens=1-2 delims=_" %%a in ('dir /b /a-d screenshot_*.png') do if "%%~nb" neq "" (if %%~nb GTR !max! set max=%%~nb)
set /a max+=1
move screenshot_.png screenshot_%max%.png
popd
echo %max%|clip
 

Rinat

Новый пользователь
Сообщения
10
Реакции
1
Баллы
3
Неправильно был прописан сценарий и последовательность кода.
Спасибо. Всё работает.
 
Сверху Снизу