Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
 Аватар для igornet77
1 / 1 / 0
Регистрация: 12.11.2014
Сообщений: 10

Батник картинки из папки по очереди делает фоном Рабочего стола

06.12.2014, 04:53. Показов 4816. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго утра всем . Задался целью собрать bat , который сменял бы фон .По сети скрипт нашёл только он с расширением bmp работает . Хм ..пришлось nconvert добавить , и других блоков добавить .
А всё работает , только что закончил , уже и протестировал...
Вот сам код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
@echo
:: если папки для фона нет , то сделать(т.е. для первого пуска)
if not exist "%systemroot%\Web\Wallpapers" md "%systemroot%\Web\Wallpapers"
:: если списка рисунков нет , то сделать
if not exist "%cd%\brutto.lst" goto b
:: если скрипта нет , то сделать(т.е. для первого пуска)
if not exist "%cd%\wall.vbs" goto c
ChCp 1251>Nul
goto a
:c
set "Fon.bat=Fon.bat"
set "wall.vbs=wall.vbs"
set "from=^<dekl^>"
set "to=^</dekl^>"
 
type "%Fon.bat%">.tmp
mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Split(Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(".tmp").ReadAll(),"%from%")(1),"%to%")(0))&Close()">"%wall.vbs%"
del .tmp
 
:b
dir /b %systemroot%\Web\Wallpaper >brutto.lst
 
:a
:: "%systemroot%\Web\Wallpaper"-это директория рисунков для фона Рабочего стола
set in="%systemroot%\Web\Wallpaper"
:: "%systemroot%\Web\Wallpapers"-это директория сконвертированных рисунков для скрипта wall.vbs
set out="%systemroot%\Web\Wallpapers"
 
:: выделяем из списка первую строку с именем рисунка в отдельный лист
set /p x=<brutto.lst
set /p "x=%x%"<nul >netto.lst
 
set netto.lst=netto.lst
::удаляем прежний сконвертированный рисунок
del "%systemroot%\Web\Wallpapers\*.bmp"
 
:: в главном списке удаляем первую строку с именем рисунка , который уже в работу
set text_file=brutto.lst
for /f %%i in ('find /c /v ""^<"%text_file%"') do set /a n=%%i+1
>nul copy nul 0.tmp
>1.tmp fc /lb%n% 0.tmp "%text_file%"
>2.tmp<1.tmp more +4
>3.tmp<2.tmp find /v "*****"
del 0.tmp 1.tmp 2.tmp
>nul move 3.tmp %text_file%
 
 
:: имя первого из списка в переменную
For /F "UsebackQ delims=" %%a in ("%netto.lst%") do (
rem копируем файл в папку получателя
copy /y "%in%\%%a" "%out%"
rem там и конвертируем
nconvert -out bmp "%out%\%%a"
)
:: переименовываем получившийся bmp в 1.bmp
ren "%out%\*.bmp" 1.bmp
:: если список пуст рисунка нет , то делаем список заново и всё сначала с метки b
if not exist "%systemroot%\Web\Wallpapers\1.bmp" goto b
:: запуск скрипта wall.vbs - Сделать фоном Рабочего стола
wscript.exe //NOLOGO wall.vbs
:: очистка лишнего в папках
del "%systemroot%\Web\Wallpapers\*.jpg"
del "%systemroot%\Web\Wallpapers\*.jpeg"
exit
:: тело скрипта
<dekl>Set objWshShell = WScript.CreateObject("Wscript.Shell")
strPath2DestWallpaper = "%systemroot%\Web\Wallpapers\1.bmp"
objWshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", strPath2DestWallpaper, "REG_SZ"
objWshShell.Run """%SystemRoot%\System32\RUNDLL32.EXE"" user32.dll,UpdatePerUserSystemParameters", 0, True</dekl>

А работает так: создайте батник Fon.bat , скачайте где ни будь nconvert.exe и бросьте его в ту же папку где Fon.bat

Буду рад если кто сам код сократит , ведь можно и покороче написать!

Добавлено через 10 минут
А сам оригинальный код скрипта wall.vbs таков:

Code
1
2
3
4
Set objWshShell = WScript.CreateObject("Wscript.Shell")
strPath2DestWallpaper = *bmp"
objWshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", strPath2DestWallpaper, "REG_SZ"
objWshShell.Run """%SystemRoot%\System32\RUNDLL32.EXE"" user32.dll,UpdatePerUserSystemParameters", 0, True
В пояснении было , что * заменить путём .
Запускается
Code
1
wscript.exe //NOLOGO wall.vbs
Добавлено через 3 часа 10 минут
Кстати фон держится до перезагрузки . После перезагрузки - пустой .
Скрипт wall.vbs можно копировать в Автозагрузку туда же для его запуска батник
код
Code
1
wscript.exe //NOLOGO wall.vbs
Добавлено через 5 минут
только проблемка : какую бы тему ни ставили , скрипт при Автозагрузке свою последнюю поставит
подскажите что проще сделать
варианты ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2014, 04:53
Ответы с готовыми решениями:

Что с ноутбуком - пропадают папки, документы и картинки с рабочего стола
Ноутбук купили чуть меньше года, но до сих пор не до конца разбираюсь! В ноуте была установлена windows8, а на стационарном компе стоит 7,...

Залить TImage фоном рабочего стола
Приветствую! Посоветуйте пожалуйста как залить компонент TImage фоном рабочего стола Пробовал так, - безрезультатно: ...

Как сделать .avi-файл фоном рабочего стола?
Как сделать .avi-файл фоном рабочего стола? Т. е чтобы под иконками, программами и т. д. воспроизводилось изображение?

3
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
06.12.2014, 09:48
Цитата Сообщение от igornet77 Посмотреть сообщение
подскажите что проще сделать
MagicLogon https://yadi.sk/d/C5bmpizvdBg7i
после перезагрузки системы меняется фоновая картинка. Фоновую картинку можно сменить и через контекст "мой компьютер"
Personalization https://yadi.sk/d/cbYRDAxtdBgAo
Фоновые картинки меняются через определённый промежуток времени.

Утилитки немного модернизированы мной для применения в сборках WinXP.
2
 Аватар для igornet77
1 / 1 / 0
Регистрация: 12.11.2014
Сообщений: 10
07.12.2014, 21:20  [ТС]
Сам уже решил таки , путь рисунка рабочего стола C:\Documents and Settings\User\Local Settings\Application Data\Microsoft\Wallpaper1.bmp
Похоже он всегда там . Копирую свой туда под то же имя - заменяю....
РЕЗУЛЬТАТ - после перезагрузки мой (МОЙ!!!!!) фон

Мой окончательный код :
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
@echo
:: если папки для фона нет , то сделать(т.е. для первого пуска)
if not exist "%systemroot%\Web\Wallpapers" md "%systemroot%\Web\Wallpapers"
:: если списка рисунков нет , то сделать
if not exist "%systemroot%\Web\Wallpapers\brutto.lst" goto b
:: если скрипта нет , то сделать(т.е. для первого пуска)
if not exist "%systemroot%\Web\Wallpapers\wall.vbs" goto c
ChCp 1251>Nul
goto a
:c
set "Fon.bat=Fon.bat"
set "wall.vbs=%systemroot%\Web\Wallpapers\wall.vbs"
set "from=^<dekl^>"
set "to=^</dekl^>"
 
type "%Fon.bat%">.tmp
mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Split(Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(".tmp").ReadAll(),"%from%")(1),"%to%")(0))&Close()">"%wall.vbs%"
del .tmp
 
:b
dir /b %systemroot%\Web\Wallpaper >%systemroot%\Web\Wallpapers\brutto.lst
 
:a
:: "%systemroot%\Web\Wallpaper"-это директория рисунков для фона Рабочего стола
set in=%systemroot%\Web\Wallpaper
:: "%systemroot%\Web\Wallpapers"-это директория сконвертированных рисунков для скрипта wall.vbs
set out=%systemroot%\Web\Wallpapers
 
:: выделяем из списка первую строку с именем рисунка в отдельный лист
set /p x=<%systemroot%\Web\Wallpapers\brutto.lst
set /p "x=%x%"<nul >%systemroot%\Web\Wallpapers\netto.lst
 
set "netto.lst=%systemroot%\Web\Wallpapers\netto.lst"
::удаляем прежний сконвертированный рисунок
del "%systemroot%\Web\Wallpapers\*.bmp"
 
:: в главном списке удаляем первую строку с именем рисунка , который уже в работу
set text_file=%systemroot%\Web\Wallpapers\brutto.lst
for /f %%i in ('find /c /v ""^<"%text_file%"') do set /a n=%%i+1
>nul copy nul 0.tmp
>1.tmp fc /lb%n% 0.tmp "%text_file%"
>2.tmp<1.tmp more +4
>3.tmp<2.tmp find /v "*****"
del 0.tmp 1.tmp 2.tmp
>nul move 3.tmp %text_file%
 
 
:: имя первого из списка в переменную
For /F "UsebackQ delims=" %%a in ("%netto.lst%") do (
rem копируем файл в папку получателя
copy /y "%in%\%%a" "%out%"
rem там и конвертируем
nconvert -out bmp "%out%\%%a"
)
:: переименовываем получившийся bmp в 1.bmp
ren "%out%\*.bmp" 1.bmp
:: если список пуст рисунка нет , то делаем список заново и всё сначала с метки b
if not exist "%systemroot%\Web\Wallpapers\1.bmp" goto b
:: запуск скрипта wall.vbs - Сделать фоном Рабочего стола
wscript.exe //NOLOGO "%systemroot%\Web\Wallpapers\wall.vbs"
:: очистка лишнего в папках
copy /y "%systemroot%\Web\Wallpapers\1.bmp" "%systemdrive%\Documents and Settings\User\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
del "%systemroot%\Web\Wallpapers\*.jpg"
del "%systemroot%\Web\Wallpapers\*.jpeg"
 
exit
 
 
 
 
 
:: тело скрипта
<dekl>Set objWshShell = WScript.CreateObject("Wscript.Shell")
strPath2DestWallpaper = "%systemroot%\Web\Wallpapers\1.bmp"
objWshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", strPath2DestWallpaper, "REG_SZ"
objWshShell.Run """%SystemRoot%\System32\RUNDLL32.EXE"" user32.dll,UpdatePerUserSystemParameters", 0, True</dekl>

Работает чётко , протестил (это обязательно). Рядом с батником бросаете утилитку nconvert ,
и пользуетесь
Кто бы код сократил , чтоб покороче ...подожду..

Добавлено через 19 минут
Вот ссылка на архив там nconvert.exe и компилятор bat в exe . Батник который сделаете по коду , выложенному мною
Fon.bat . После(!) пары запусков скомпилируете его в exe . Тогда мелькания консольного окна не будет , красотааааа.

Добавлено через 38 секунд
https://yadi.sk/d/8ZCbfVAedDEq8
1
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
07.12.2014, 23:46
igornet77, возможно Вам и это (из моей коллекции) пригодится

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
' обрезает края картинок с учётом размера монитора, центруя их по центру
Option Explicit
 
Dim objFSO
Dim objFile
 
Dim strPath2Wallpapers
Dim strPath2File
 
Dim objImageFile
Dim objImageProcess
 
Dim lngScreenHeight
Dim lngScreenWidth
 
Dim lngDelta
 
 
Set objFSO          = WScript.CreateObject("Scripting.FileSystemObject")
Set objImageFile    = WScript.CreateObject("WIA.ImageFile")
Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
 
strPath2Wallpapers = objFSO.BuildPath(objFSO.GetSpecialFolder(0).Path, "Web\Wallpaper")
 
With WScript.CreateObject("htmlfile")
    With .Script.screen
        lngScreenHeight = .Height
        lngScreenWidth  = .Width
    End With
End With
 
If objFSO.FolderExists(strPath2Wallpapers) Then
    For Each objFile In objFSO.GetFolder(strPath2Wallpapers).Files
        WScript.Echo objFile.Path
        
        objImageFile.LoadFile objFile.Path
        
        With objImageProcess
            .Filters.Add .FilterInfos("Crop").FilterID
            
            With .Filters(1).Properties
                If lngScreenHeight / lngScreenWidth > objImageFile.Height / objImageFile.Width Then
                    ' Подрежем справа-слева
                    lngDelta = (objImageFile.Width - objImageFile.Height * lngScreenWidth / lngScreenHeight) / 2
                    
                    .Item("Left")   = lngDelta
                    .Item("Right")  = lngDelta
                ElseIf lngScreenHeight / lngScreenWidth < objImageFile.Height / objImageFile.Width Then
                    ' Подрежем сверху-снизу
                    lngDelta = (objImageFile.Height - objImageFile.Width * lngScreenHeight / lngScreenWidth) / 2
                    
                    .Item("Top")    = lngDelta
                    .Item("Bottom") = lngDelta
                Else
                    ' Nothing to do
                End If
            End With
            
            Set objImageFile = .Apply(objImageFile)
            
            .Filters.Remove 1
        End With
        
        ' Перезаписывать существующий файл компонент не умеет,
        ' потому предварительно удаляем файл…
        strPath2File = objFile.Path
        objFile.Delete
        
        ' Сохраняем файл под тем же именем:
        objImageFile.SaveFile strPath2File
    Next
Else
    WScript.Echo "Wallpaper's folder [" & strPath2Wallpapers & "] not found"
End If
 
Set objImageProcess = Nothing
Set objImageFile    = Nothing
Set objFSO          = Nothing
 
WScript.Quit 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2014, 23:46
Помогаю со студенческими работами здесь

Имя папки рабочего стола
Приветствую всех. Установил Windows 10 Домашняя для одного языка. Лицензия есть. В OneDrive убрал из автоматически синхронизируемых все...

Пропали папки с рабочего стола
Здравствуйте! Пропали папки созданные пользователем с РС, остались только стандартные значки и ярлыки аськи и скайпа! в чем проблема?

Пропадают ярлыки и папки с рабочего стола
Столкнулась с этим впервые... обшарила кучу сайтов.. Проблемма такая.. принес мне комп таджик... на его компе 3 учетных записи + админ... У...

Пропали все папки с рабочего стола!
Доброго времени суток! Такая проблема: пропали все папки с рабочего стола(винда10), при этом с левой стороны экрана появились...

Не удаляютя файлы и папки с рабочего стола
Добрый день! Не удаляются файлы и папки с рабочего стола. Ошибок никаких не выдается - просто ничего не происходит при нажатии Delete...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru