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

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

Автор: andrew1692
Дата сообщения: 17.09.2010 20:45
bomzzz
объясни, пожалуйста, что охзначают ~26% и ~26,29%
и еще, ка я понял вместо ааааааааа и ввввввввв надо прописать имена экзешников?
Автор: ComradG
Дата сообщения: 17.09.2010 20:47
andrew1692
Ключи наизусть реестра не помню, но чо-то вроде:

Код: @echo off
setlocal
for /f "tokens=1,2,*" %%i in ('2^>nul reg query^
"hklm\software\microsoft\windows nt\currentversion"') do (
if %%i==СSDVersion set p=%%k
)
if "%p%"=="5.1" 1.exe
if "%p%"=="6.1" 2.exe
endlocal
exit /b
Автор: bomzzz
Дата сообщения: 17.09.2010 20:48
andrew1692
осначают вырезать кусок строки от 26 символа сначала до 29 с начала
Автор: andrew1692
Дата сообщения: 17.09.2010 20:58
bomzzz

Цитата:
ECHO OFF
COLOR 9F
CLS
FOR /F "SKIP=4 delims=*" %%I IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion') DO SET WVersion=%%I
echo %WVersion:~26%
SET WVersion=%WVersion:~26,29%
if %WVersion%==5.1 (
1.exe
goto :eof
)
if %WVersion%==6.1 (
2.exe
goto :eof
)
echo UNKNOWN VERSION
pause

не работает

Автор: bomzzz
Дата сообщения: 17.09.2010 20:59
я не знаю как выглядит строка на 6.1 у меня 5.1, на 5.1 будет рабокать на 6.1 надо проверять
Автор: SLIDER999
Дата сообщения: 17.09.2010 20:59
ребята, нужно перекодировать текст из ANSI в UTF 16-le с BOM через cmd.
делаю так:

Код: <Nul >Runss.xml Set /P $VAR=яю
recode cp1251..utf16-le <1.tmp >>Runss.xml
Автор: andrew1692
Дата сообщения: 17.09.2010 21:01
bomzzz
ну на 6.1 не хочет отрабатывать
Автор: bomzzz
Дата сообщения: 17.09.2010 21:01

у меня работает. подправь

Добавлено:
andrew1692
а я тебе че сделаю, я не знаю как на 6.1 строка выглядит. посматри как строка выглядит и исправь батник
Автор: ComradG
Дата сообщения: 17.09.2010 21:05
SLIDER999
Заморачиваться с подобным через cmd сродни мазохизму, уже разбирал, так что лучше воспользуйся [more=powershell'ом]Get-Content test.txt | Set-Content -Encoding UTF16 test2.txt[/more].
Автор: bomzzz
Дата сообщения: 17.09.2010 21:15
без обрезания строки сделай, полную строку сравнивай. а на 6.1 может номер строки другой
Автор: faithful
Дата сообщения: 17.09.2010 21:55
andrew1692

Цитата:
цель такая, проверить через реестр текущую версию ОС
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion ключ CurrentVersion
если в нем 5.1 надо запустить 1.exe, а если 6.1 то 2.exe

А чем плоха команда ver?
Автор: BVV63
Дата сообщения: 18.09.2010 07:02
andrew1692

Код: For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`WMIC.Exe OS Get Version /Value`) Do Set OSVersion=%%0
If "%OSVersion:~0,3%"=="5.1" 1.Exe & GoTo :EOF
If "%OSVersion:~0,3%"=="6.1" 2.Exe & GoTo :EOF
Автор: Free_Soft
Дата сообщения: 18.09.2010 08:00
У меня задача сродни вышеописанной:
нужно экранировать значение параметра "KeyManagementServiceName" ключа "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform". Полностью ветка выглядит так:

Код: REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v KeyManagementServiceName
Автор: bomzzz
Дата сообщения: 18.09.2010 08:09
че значит экранировать
Автор: Free_Soft
Дата сообщения: 18.09.2010 08:12
вывести через echo значение параметра
Автор: bomzzz
Дата сообщения: 18.09.2010 08:28
ECHO OFF
COLOR 9F
CLS
FOR /F "SKIP=4 delims=*" %%I IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v KeyManagementServiceName ') DO echo %%I

pause

у меня такого параметра нету

Добавлено:
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v KeyManagementServiceName
оно и так выведется
Автор: Free_Soft
Дата сообщения: 18.09.2010 08:37
не выводится. И потом мне нужно только значение параметра, т.е. чтобы до него вся ветка не выводилась
Автор: bomzzz
Дата сообщения: 18.09.2010 08:41
значит у тебя тоже такого параметра нету. что пишет?
Автор: Free_Soft
Дата сообщения: 18.09.2010 08:50
bomzzz
параметр есть. просто паузу выводит и все
Автор: bomzzz
Дата сообщения: 18.09.2010 08:53
может номер строки не 4-ый
Автор: Free_Soft
Дата сообщения: 18.09.2010 08:55
Да, не 4-й... 2-й.

Код: KeyManagementServiceName REG_SZ 127.0.0.1
Автор: bomzzz
Дата сообщения: 18.09.2010 08:59
посчитай сколько символов до него и отрежь

Добавлено:
или по пробелам строку разбей и возьми четвертый токенс
Автор: Free_Soft
Дата сообщения: 18.09.2010 09:04
да я так отрезал. Спасибо
Автор: BVV63
Дата сообщения: 18.09.2010 09:19
bomzzz
Free_Soft

Цитата:
может номер строки не 4-ый


Цитата:
Да, не 4-й... 2-й.

Не сочтите за нравоучение .
Чтобы абстрагироваться от версий ОС (поскольку вывод у Reg в разных версиях отличается в числе предварительных "ненужных" строк) проще вывод пускать в конвейер: "| FindStr /I "Имя_параметра"".
Автор: Free_Soft
Дата сообщения: 18.09.2010 09:29
BVV63
ммм... Так?

Код: FOR /F "delims=*" %%I IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" | findstr /i KeyManagementServiceName') do set...
Автор: bomzzz
Дата сообщения: 18.09.2010 10:10
да какая бы ни была строка - она последняя
Автор: faithful
Дата сообщения: 18.09.2010 10:10
Free_Soft
Только в версии для bat файлов нужно перед метасимволами ставить "^"


Код: FOR /F "delims=*" %%I IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" ^| findstr /i KeyManagementServiceName') do set...
Автор: BVV63
Дата сообщения: 18.09.2010 10:14
Free_Soft
Не совсем. Во-первых, в скобках "|" нужно экранировать: "^|". Во-вторых... Впрочем, проще какой-нить пример привести:

Код: For /F "Tokens=3" %%I In ('Reg Query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /V "CurrentVersion" ^| FindStr /I "CurrentVersion"') Do Echo %%I
Автор: lorents
Дата сообщения: 18.09.2010 12:09
Добрый день!
Подскажите, мне надо перебрать значение от 1 до 1024

Код: for %%j in (1...1024) do
Автор: bomzzz
Дата сообщения: 18.09.2010 12:15
lorents

Цитата:

Итерация диапазона значений
Используйте переменную итерации для установки начального значения (НачальноеЗначение#), а затем перемещайтесь по диапазону значений, пока значение не превысит конечное значение множества (КонечноеЗначение#). /L выполнит итерацию, сравнив параметр НачальноеЗначение# с параметром КонечноеЗначение#. Если параметрНачальноеЗначение# меньше параметра КонечноеЗначение#, то выполняется команда. Когда переменная итерации превысит параметр КонечноеЗначение#, командная оболочка покидает цикл. Также можно использовать отрицательный параметр шаг# для перемещения в диапазоне убывающих значений. Например, (1,1,5) создает последовательность «1 2 3 4 5», а (5,-1,1) создает последовательность «5 4 3 2 1». Используется следующий синтаксис.


for /L {%% | %}переменная in (НачальноеЗначение#,шаг#,КонечноеЗначение#) do команда [ПараметрыКоманднойСтроки]


Добавлено:
FOR /L %%I IN (1,1,1024) DO echo %%I

Добавлено:
чета не особо быстро этот цикл выполняется.

Цитата:

@ECHO OFF
COLOR 9F
CLS
FOR /L %%I IN (1,1,1024) DO (
set Temp=%%I
call :next
)
pause
goto :eof
:next
set Temp=000%Temp%
set Temp=%Temp:~-4%
<nul set /p "Temp=%Temp% "


Добавлено:
21 секунду в файл распечатывает. 1000 файлов быстрее обрабатывает.

Добавлено:
калькулятор надо сделать для батников

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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