Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: WesternLight
Дата сообщения: 13.06.2010 01:58

Цитата:
как именно не работает - предлагается у телепата узнавать?
окно перезапускает при непрописанной люсиде, люсиду прописывает?
или запускает, но по прежнему с терминальным шрифтом, в том числе и при ручном повторном запуске?

первый вариант вообще не перезапускает, сам запускается, отображает кракозябры и закрывается, люсиду не прописывает, тоже и при повторном запуске.
второй вариант делает тоже самое, но еще и не закрывается сам.
смущает меня эта команда, не хочет работать...

Цитата:
start "" "%~f0" %* & exit




Цитата:
если второе - у тебя для батника уже есть сохраненные собственные настройки, где прописан терминал

я в шоке... у меня было не второе, но собственные настройки для cmd.exe были, я удалил подраздел %SystemRoot%_system32_cmd.exe, потом еще раз настроил cmd.exe на использование terminal, т.е. удаленный подраздел появился снова и вот тогда батник сработал! проделал еще раз тоже самое - работает, в чем же был прикол??
Автор: wolf0425
Дата сообщения: 13.06.2010 04:43

Цитата:
смущает меня эта команда, не хочет работать...
Цитата:
start "" "%~f0" %* & exit
а чего смущает?
запустить новую консоль с пустым заголовком, передав на исполнение полное имя текущего батника и все его параметры.
после чего выйти из текущего батника (новая копия - уже сама по себе)
на XP замечательно работает, проверял...


Цитата:
проделал еще раз тоже самое - работает, в чем же был прикол??
да кто теперь скажет что у тебя там было с настройками наворочено.

Та версия батника что под красным шрифтом трет нафиг все индивидуальные установки консольных программ, если хоть одна из них имеет терминал дежурным фонтом. Жестко, зато кардинально и попутно вычищает всякие настройки длс программ, в которых пару лет назад настройки консоли правили. В принципе - одних праивльно сделанных дефолтовых настроек - практически всем и должно хватать, кому не хватит - заново поправить не проблема....




Автор: ComradG
Дата сообщения: 13.06.2010 10:07

Цитата:
ComradG, а результат зависит от региональных настроек? И что это такое :~0,2? Не видел в справке к командам, вообще не видел...

Перечитай внимательно справку, от региональных настроек данное выражение не зависит, так как является уникальным, раз, во-вторых,
Цитата:
~0,2
если ты не в курсе, то и не гни пальцы, дескать "я побольше твоего знаю". Похоже справку тут к cmd.exe никто не читал, если заверяют, что

Цитата:
хочется независимо - то надо разбирать wmic os get LocalDateTime

А толку? Переменные time и date по-умолчанию в любой системе отображают данные в формате XX:XX:XX, так что использование конструкции

Код: set time=%time:~0,2%:%time:~3,2%:%time:~-5,2%
Автор: mugil_cephalus
Дата сообщения: 13.06.2010 10:25
а это правильная арифметика???
F:\>if "2" GTR "19" echo.hi
hi

Добавлено:
obla4ko4240019

Цитата:
ага, практически то, только наоборот) нужно указывать те файлы, которые не будут удаляться. А в данном случае удаляются указанные файлы

ты писал -
Цитата:
а как не удалять заданные номера или диапазон, т.е. oem1-oem20 например? а oem21-oem140 удалять?

p.s.
а что делать с oem0 ?
Автор: NIKZZZZ
Дата сообщения: 13.06.2010 11:01
ComradG

Цитата:
set time=%time:~0,2%:%time:~3,2%:%time:~-5,2%

А насколько это корректно? Во время выполнения этой строки значение %Time% может измениться, что приведет к неправильному результату.

mugil_cephalus

Цитата:
а это правильная арифметика???
F:\>if "2" GTR "19" echo.hi
hi


Правильная, сравниваются две строки (не числа), кавычки и говорят, что это строки.

Автор: yurkesha
Дата сообщения: 13.06.2010 11:03
ComradG

Цитата:
Перечитай внимательно справку, от региональных настроек данное выражение не зависит, так как является уникальным, раз, во-вторых,
формат времени в региональных настройкахH:M:S
Не заради
Цитата:
повыпендриваться или просто облить гразью
а токмо ради установления истины.
Потому как дефолтные настройки и вообще настройки - это две большие разницы.

Автор: mugil_cephalus
Дата сообщения: 13.06.2010 11:21
NIKZZZZ

Цитата:
Правильная, сравниваются две строки (не числа), кавычки и говорят, что это строки.

спасибо - слишком невыразительно будет в этом случае, а то всю голову уже сломал

доизвращался до
F:\>if "02" GTR "19" (echo.hi) else echo.bye
bye
Автор: king_stiven
Дата сообщения: 13.06.2010 11:25
wolf0425

Цитата:
никто не подскажет красивого решения - надо удалить все подкаталоги в которых кроме file.txt ничего не лежит.

Что значит красиво? Если например каталогов и файлов немеряно, то так можно

Код: for /f "delims=" %%e in ('dir file.txt /b /s') do (
set "g=%%~dpe"
call :up
)
goto :eof
:up
for /f "delims=" %%i in ('dir %g% /b') do if not "%%i"=="file.txt" goto io
rd "%g%" /S /Q
:io
Автор: Mark_Titov
Дата сообщения: 13.06.2010 11:27

Цитата:
...Подскажите пож-ста что прописать в батнике что бы из него запускалось окно cmd с командой на просмотр всех сервисов на удаленной машине?

...Кто-нибудь поможет?
Заранее спасибо...
Автор: wolf0425
Дата сообщения: 13.06.2010 11:32
ComradG


Цитата:
Перечитай внимательно справку, от региональных настроек данное выражение не зависит, так как является уникальным, раз, во-вторых,
что-то не нашел я где в хэлпе по cmd написно что формат %time% НЕ зависит от региональных настроек, если нашел ты - надо скорее в Микрософт написать, может исправят (справку). это во-первых.
во вторых точно знаю что зависит и знаю как в этом за минуту убедиться, и последний раз проверял не так давно.

Цитата:
А если хотите повыпендриваться или просто облить гразью, для этого есть ПМ.
а в третьих для того чтобы давать кому-то такие советы - надо сначала научиться им следовать самому, а не кичиться тем что невнимательно прочел справку и начал считать себя самым умным.
Автор: WesternLight
Дата сообщения: 13.06.2010 11:43

Цитата:
Та версия батника что под красным шрифтом трет нафиг все индивидуальные установки консольных программ, если хоть одна из них имеет терминал дежурным фонтом. Жестко, зато кардинально и попутно вычищает всякие настройки длс программ, в которых пару лет назад настройки консоли правили. В принципе - одних праивльно сделанных дефолтовых настроек - практически всем и должно хватать, кому не хватит - заново поправить не проблема....

wolf0425, спасибо! Это и есть результат, который был нужен, даже больше... Не обессудь, но буду вынужден обратиться еще раз

Цитата:
если ты не в курсе, то и не гни пальцы, дескать "я побольше твоего знаю". Похоже справку тут к cmd.exe никто не читал, если заверяют, что

ComradG, если это обращено мне, то совершенно не в тему... Я пытался узнать новое для себя, действительно нигде не читал про такие конструкции
Автор: mugil_cephalus
Дата сообщения: 13.06.2010 11:47
obla4ko4240019

Код: @echo off
setlocal enabledelayedexpansion
for /R "%systemroot%\inf\" %%a in (oem*.inf) do (
set "cnt=%%~na"
set "cnt=!cnt:~3!"
if !cnt! lss 1 dpinst.exe /U "%%a" /S /D
if !cnt! gtr 20 dpinst.exe /U "%%a" /S /D
)
set "cnt="
pause
Автор: res2001
Дата сообщения: 13.06.2010 12:10
Mark_Titov
start "" sc query
Автор: mugil_cephalus
Дата сообщения: 13.06.2010 12:22
wolf0425
получается help расходиться с практикой?
При включенной расширенной обработке команд доступны несколько переменных
среды, которые не отображаются в списке, отображаемом при вызове команды SET.
Значения этих переменных вычисляются динамически каждый раз при их извлечении.
Если пользователь явно задает переменные с одним из этих имен,
то это определение перекрывает соответствующее динамическое определение,
описанное ниже:

%CD% - раскрывается в строку текущей директории.

%DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.

%TIME% - раскрывается в текущую дату, используя формат команды TIME.

%RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.

%ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL

%CMDEXTVERSION% - раскрывается в текущее значение версии
расширенной обработки команд.

%CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала
командный процессор.

Код: set "var=%time%__%random%%random%%random%-%cd%%cd%%cd%-%SESSIONNAME%%SESSIONNAME%%SESSIONNAME%-%PATHEXT%%PATHEXT%%PATHEXT%%PATHEXT%%PATHEXT%__check-%time%"
pause
Автор: WesternLight
Дата сообщения: 13.06.2010 12:38

Цитата:
Та версия батника что под красным шрифтом трет нафиг все индивидуальные установки консольных программ, если хоть одна из них имеет терминал дежурным фонтом. Жестко, зато кардинально и попутно вычищает всякие настройки длс программ, в которых пару лет назад настройки консоли правили. В принципе - одних праивльно сделанных дефолтовых настроек - практически всем и должно хватать, кому не хватит - заново поправить не проблема....

wolf0425, вот и обращаюсь снова. Хотел проверить как reg.exe от XP работает в W7, прописал путь к reg.exe, лежащему в одной с батником директории

Цитата:
"%CD%\reg.exe"

про usebackq в for /f не забыл, хотя надо ли? После запуска: первое окно c кракозябрами за которыми прячется сообщение "Системе не удается найти указанный путь", дальше перезапуск продолжается бесконечно, сообщение о не найденном пути отображается корректно в каждом следующем окне... Что тут не так?
Автор: wolf0425
Дата сообщения: 13.06.2010 12:44

Цитата:
получается help расходиться с практикой?
не, получается что хэлп прав, не прав я.
Действительно могут быть глюки и употреблять %time% более одного раза на строку - не стоит.
на миллион строк поймал 26 расхождений в секундах между двумя %time% в строке.
расхождений в минутах - не было, но это вопрос количества.

т.е. через промежуточную переменную надо делать, если редкие ошибки недопустимы.
Автор: obla4ko4240019
Дата сообщения: 13.06.2010 12:48
mugil_cephalus

Цитата:
а что делать с oem0 ?

я думаю, не важно. Например тоже удалять. Главное, чтобы можно было указываать то, что удалять не надо.

Добавлено:
mugil_cephalus

Цитата:
ты писал -
Цитата:
а как не удалять заданные номера или диапазон, т.е. oem1-oem20 например? а oem21-oem140 удалять?

тех файлов, что нужно удалять, будет меньше, поэтому их удобнее будет указывать. К тому же они будут фиксированы, а 20-140 будут варьиролваться и увеличиваться..

Добавлено:
mugil_cephalus

Цитата:
Код:
@echo off
setlocal enabledelayedexpansion
for /R "%systemroot%\inf\" %%a in (oem*.inf) do (
set "cnt=%%~na"
set "cnt=!cnt:~3!"
if !cnt! lss 1 dpinst.exe /U "%%a" /S /D
if !cnt! gtr 20 dpinst.exe /U "%%a" /S /D
)
set "cnt="
pause

поясни, пожалуйста. Не понимаю весь код.
Автор: Mark_Titov
Дата сообщения: 13.06.2010 13:17

Цитата:
Mark_Titov
start "" sc query

...Спасибо. res2001

Поставил паузу после команды - окно все равно закрывается.
Как прописать что бы паузу слушалось?
Автор: wolf0425
Дата сообщения: 13.06.2010 14:07
obla4ko4240019
Цитата:
поясни, пожалуйста. Не понимаю весь код.
весь не понимаешь или какую-то сроку пояснить надо?
весь - писать многовато. если кратко -
сначала в !cnt! выделяется численное значение из oem*.inf
потом оно сравнивается на < 1 и на >20
по результату сравнения запускается dpinst


Mark_Titov

Цитата:
Поставил паузу после команды - окно все равно закрывается.
логично - пауза будет относиться к текущему коду, а не к окну
к новому окну - например так:
Код: start "" cmd /c "sc query & pause"
Автор: Mark_Titov
Дата сообщения: 13.06.2010 14:36

Цитата:
к новому окну - например так:

...Благодарю, класс wolf0425.
Скажи, а как сделать что бы этот код -

Код: set "sernum=1000"
for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (
if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title ‚›ЏЋЌџ…’‘џ ЏЋ€‘Љ ЋЃљ…Љ’Ћ‚: %%b
if /i .%%a equ .DISPLAY_NAME: (
echo %%b
set /a sernum += 1
set "_service_!sernum:~1!=!_servicen_!"
set "_serviced_!sernum:~1!=%%b"
)
)
Автор: res2001
Дата сообщения: 13.06.2010 14:59
Mark_Titov
выдели код в отдельный батник и запускай его startом. В конец нового батника можно и паузу воткнуть.
Автор: wolf0425
Дата сообщения: 13.06.2010 15:17

Цитата:
выдели код в отдельный батник и запускай его startом.
или в отдельную часть текущего батника, и вызывать себя рекурсивно, с ветвлением по стартовому ключу.

не, конечно в принципе никто не запрещает впихнуть этот код в одну дииииинную строку и вызвать её стартом - но код станет нечитаемым и трудноредактируемым.
Автор: obla4ko4240019
Дата сообщения: 13.06.2010 15:26
wolf0425

Цитата:
весь не понимаешь или какую-то сроку пояснить надо?
весь - писать многовато. если кратко -
сначала в !cnt! выделяется численное значение из oem*.inf
потом оно сравнивается на < 1 и на >20
по результату сравнения запускается dpinst

теперь понял, спасибо!
mugil_cephalus
спасибо огромное! помог очень.
Автор: Mark_Titov
Дата сообщения: 13.06.2010 15:38

Цитата:
выдели код в отдельный батник и запускай его startом. В конец нового батника можно и паузу воткнуть.

...В том то и дело что нужно с одного окна именно КОМАНДУ ПЕРЕДАВАТЬ В ДРУГОЕ ОКНО CMD, А НЕ БАТНИКА.


Цитата:
или в отдельную часть текущего батника, и вызывать себя рекурсивно, с ветвлением по стартовому ключу.

...что-то на подобие этого.

Я пытаюсь делать так -


Код: :20
TITLE SERVICES MANAGER
CLS
echo.
ECHO *************************************************** МЕНЮ ***************************************************
ECHO ************************************************************************************************************
ECHO.
ECHO.
ECHO 1. Servise
ECHO.
ECHO 0. Выход из меню
ECHO.
ECHO.
ECHO.
set /p reply= Введите номер и нажмите Enter:
IF /I "%reply%"=="1" GOTO :service
GOTO :20

:service
start "" cmd /c
set "sernum=1000"
for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (
if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scaning: %%b
if /i .%%a equ .DISPLAY_NAME: (
echo %%b
set /a sernum += 1
set "_service_!sernum:~1!=!_servicen_!"
set "_serviced_!sernum:~1!=%%b"
)
)
pause
GOTO :20
Автор: NIKZZZZ
Дата сообщения: 13.06.2010 16:02
Mark_Titov

Цитата:
Нужно что бы при нажатии 1+enter в отдельном окне были все сервисы удаленной машины



Код: if "%1"=="/service" GOTO :service
:20
TITLE SERVICES MANAGER
CLS
echo.
ECHO *************************************************** МЕНЮ ***************************************************
ECHO ************************************************************************************************************
ECHO.
ECHO.
ECHO 1. Servise
ECHO.
ECHO 0. Выход из меню
ECHO.
ECHO.
ECHO.
set /p reply= Введите номер и нажмите Enter:
IF /I "%reply%"=="1" start "" call "%~dp0Имя этого батника" /service
GOTO :20

:service
@echo off
set "sernum=1000"
for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (
if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scaning: %%b
if /i .%%a equ .DISPLAY_NAME: (
echo %%b
set /a sernum += 1
set "_service_!sernum:~1!=!_servicen_!"
set "_serviced_!sernum:~1!=%%b"
)
)
pause
exit
Автор: Mark_Titov
Дата сообщения: 13.06.2010 16:14
NIKZZZZ, спасибо.

Цитата:
IF /I "%reply%"=="1" start "" call "%~dp0Имя этого батника" /service

Но это НЕ БАТНИК, ты не правильно понял это должна быть команда передающаяся в cmd.exe.
И в открывшемся этом новом окне должны быть все сервися удаленной машины со статусом RUNNING или STOPED.

Вт зта команда отлично подходит к моей задаче -

Код: start "" cmd /c "sc query & pause"
Автор: wolf0425
Дата сообщения: 13.06.2010 16:19

Цитата:
Но там сервисы без статусов - запущены они или нет.
как это без статусов, когда со статусами.

Код: SERVICE_NAME: wuauserv
DISPLAY_NAME: Automatic Updates
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
Автор: Mark_Titov
Дата сообщения: 13.06.2010 16:23
wolf0425

Цитата:
Цитата:Но там сервисы без статусов - запущены они или нет.

как это без статусов, когда со статусами.

Код:SERVICE_NAME: wuauserv
DISPLAY_NAME: Automatic Updates
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING

...извиняюсь, не так выразился. Статусы не упорядоченные. Там они прямо напротив и все красиво и понятно.
А тут все в разброс... Вот надо статусы на против самих сервисов сделать в этом окне...
Автор: NIKZZZZ
Дата сообщения: 13.06.2010 16:26
Mark_Titov

Цитата:
Но это НЕ БАТНИК, ты не правильно понял это должна быть команда передающаяся в cmd.exe.

Возможно, я неправильно что-то понял, но что мешает передать в батник саму команду?


Код: start "" Call service.cmd "sc query"
Автор: WesternLight
Дата сообщения: 13.06.2010 17:04

Код: @echo off

chcp 1251>nul

"%CD%\reg.exe" query "HKCU\Console" /s | findstr.exe /i /r FaceName.*Terminal 1>nul && (
for /f "delims=" %%a in ('"%CD%\reg.exe" query "HKCU\Console" ^|findstr.exe /b /i /r HKEY_CURRENT_USER\\Console\\. ') do "%CD%\reg.exe" delete %%a /f

"%CD%\reg.exe" add "HKCU\Console" /v FontSize /t REG_DWORD /d 1048576 /f
"%CD%\reg.exe" add "HKCU\Console" /v FontFamily /t REG_DWORD /d 54 /f
"%CD%\reg.exe" add "HKCU\Console" /v FontWeight /t REG_DWORD /d 400 /f
"%CD%\reg.exe" add "HKCU\Console" /v FaceName /t REG_SZ /d "Lucida Console" /f

start "" "%~f0" %* & exit
) 1>nul


:begin
echo Кракозябрам нет!

pause
exit

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.