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

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

Автор: mugil_cephalus
Дата сообщения: 08.07.2010 11:39
BVV63
можешь попробовать - http://www.rsdn.ru/article/winshell/batanyca.xml#EOG
но не знаю, в итераторе цикла не пробовал

Добавлено:
ComradG
ладно, соглашусь на новое вводное условие задачи - самомодифицирующиеся скрипты
Автор: ComradG
Дата сообщения: 08.07.2010 11:44
mugil_cephalus
Ты прости конечно, но нафига тут дублировать то, что уже решено? У тебя что - порочные отношения с параметром /d у for или просто презрение к тому, что я пишу?
Автор: BVV63
Дата сообщения: 08.07.2010 11:46
ComradG

Цитата:
Так именно это тебе надо было или нет?

Так тоже сойдёт.
Ну, я просто хотел узнать, как под For работать с двойными кавычками (если вообще надо). Несколько методов предложено, можно выбирать .
Автор: NIKZZZZ
Дата сообщения: 08.07.2010 11:47
ComradG

Цитата:
То же самое можно сделать и спараметром /d:

Проще то, к чему привык.
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 11:51
ComradG
я просил показать вывод последней строки

Цитата:
Код:set name=%systemroot%\microsoft.net\framework\v2.0.50727\vbc.exe
for /d %%i in ('%name%') do (
set name=%%~si
)
echo %name%

это не
Цитата:
просто презрение к тому, что я пишу?

, это интерес к твоим работам

Цитата:
У тебя что - порочные отношения с параметром /d у for

такой нозологии мне не известно
Автор: ComradG
Дата сообщения: 08.07.2010 11:56
NIKZZZZ
Не знаю. Может ты и прав. Но мне не хочется вбивать дополнительные параметры тогда, когда все можно сделать проще. Но все равно каждый останется при своем мнение, верно?
mugil_cephalus
Ну, удовлетворил свое любопытсво?
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 12:01
BVV63

Цитата:
Так тоже сойдёт.
Ну, я просто хотел узнать, как под For работать с двойными кавычками (если вообще надо). Несколько методов предложено, можно выбирать .

вот уже обсуждали такую же проблему - http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=1980#2
есть еще вариант -
Код: in ('@"
Автор: BVV63
Дата сообщения: 08.07.2010 12:38
mugil_cephalus

Цитата:
in ('@"

Да, так работает даже в сложных случаях. А можно в двух словах (чисто для понимания): что тут происходит?
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 12:46
BVV63

Цитата:
Да, так работает даже в сложных случаях. А можно в двух словах (чисто для понимания): что тут происходит?

а ты прочитай 2-3 страницы после ссылки , вот до - http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=2020#7
Автор: res2001
Дата сообщения: 08.07.2010 13:17
BVV63
mugil_cephalus

Цитата:
Да, так работает даже в сложных случаях. А можно в двух словах (чисто для понимания): что тут происходит?

Читай, не читай прояснения не наступит. Один из приколов cmd, имхо.
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 13:56
res2001

Цитата:
Читай, не читай прояснения не наступит. Один из приколов cmd, имхо.

вот-вот...
Автор: ComradG
Дата сообщения: 09.07.2010 13:18
Может кто сталкивался с подобным: как показать только необходимые значения реестра из запроса reg query. Лично мне надумалось только это:

Код: @echo off
setlocal
for /f "skip=2 tokens=1,2,*" %%i in ('2^>nul reg query^
hklm\hardware\description\system\centralprocessor\0') do (
if %%i==ProcessorNameString (
set proc=%%k
)
if %%i==Identifier (
set idnt=%%k
)
if %%i==~MHz (
set /a tact=%%k
)
if %%i==VendorIdentifier (
set vend=%%k
)
)
echo.
echo CPU: %proc%
echo Extend: %idnt%
echo MHz: %tact%
echo Vendor: %vend%
endlocal
exit /b
Автор: res2001
Дата сообщения: 09.07.2010 13:30
ComradG

Цитата:
Может кто сталкивался с подобным: как показать только необходимые значения реестра из запроса reg query. Лично мне надумалось только это:

дык примени reg query ... | findstr "ProcessorNameString Identifier VendorIdentifier"
Автор: ComradG
Дата сообщения: 09.07.2010 13:33
res2001
Ну и? Будет искать строки, где встречается ProcessorNameString Identifier VendorIdentifier. А ты читал

Цитата:
for изначально отбрасывает часть значений вывода reg query

То есть в выводе не должны маячить полные пути реестра.

Добавлено:
А! Дошло!
Автор: res2001
Дата сообщения: 09.07.2010 13:41
ComradG

Цитата:
А! Дошло!



Добавлено:

Цитата:
P.S>res2001 я начал разбирать windiws-1251.

собственно именно эта кодировка меня не особо волнует я как раз в нее пытаюсь остальные перекодировать.
Пока справился только с юникодом, нашел оригинальный способ, встроенными функциями js все замечательно кодируется, за кои8 не брался еще.
Автор: ComradG
Дата сообщения: 09.07.2010 13:44
res2001
Эээ! Извини за тормоза, а выводить в переменные как предлагаешь потом?

Добавлено:
Дык тебе kio8 все-таки нужно разрулить?
Автор: res2001
Дата сообщения: 09.07.2010 13:54
ComradG

Цитата:
а выводить в переменные как предлагаешь потом?

как-то так получается:

Код: @echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,*" %%i in ('reg query hklm\hardware\description\system\centralprocessor\0 ^| findstr "ProcessorNameString Identifier VendorIdentifier ~MHz"') do (
    set "str=%%i"
    set "str=!str:ProcessorNameString=CPU!
    set "str=!str:VendorIdentifier=Vendor!
    set "str=!str:Identifier=Extend!
set v=%%k
if "!str!" equ "~MHz" set "str=MHz" & set /a "v=!v!+1-1"
echo !str!:    !v!
)
Автор: ComradG
Дата сообщения: 09.07.2010 13:59
res2001
И ^ не помогает? Хм. Ладно, спасибо, будем думать далее над оптимизацией.
А, прости! На счет .NET-процессов идеи есть?
Автор: res2001
Дата сообщения: 09.07.2010 14:01
ComradG

Цитата:
А, прости! На счет .NET-процессов идеи есть?

нету, мне они не интересны на данном этапе

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

Добавлено:

Цитата:
Дык тебе kio8 все-таки нужно разрулить?

нужно кои8 в вин1251. Есть некий скрипт взятый в инете, но выглядит очень криво. Больше ничего не нашел, буду сам делать видимо.
Автор: ComradG
Дата сообщения: 09.07.2010 14:11
res2001
Спасибо. А то ни одной светлой мысли по сабжу не было.

Цитата:
нету, мне они не интересны на данном этапе

ОбЫдно. У меня просто куча прог нетовских: XMLNotepad, FileExplorer, FileChecker (последний собственного написания ), - так что мне резон с этим возиться есть. Блин, может mugil_cephalus,wolf0425 или кто тут еще башковитый имеется подскажут чего, только их невидно.

Добавлено:
На счет koi8 не обещаю, но может быть подмагну.
Автор: Vanries
Дата сообщения: 09.07.2010 15:12
Всем здарова.
У меня вот такая проблемка, переадресовать на исполнение код, написанный в AkelPad'е интерпретатору perl и вывести в окне оболочки PowerShell .
Эта же самая задача успешно реализована при помощи этого кода:


Код:
-"Execute Perl Code" Exec(`cmd.exe /k %f`, "%d") Icon("C:\Perl\bin\perl5.10.0.exe")
Автор: lorents
Дата сообщения: 09.07.2010 18:51
Добрый день!
У меня есть программа, которая выдает некую информацию о картинке
convert image.png -format "%A" info:

Will return True or False

Как мне сделать, если я получаю значения True,то выполняется одно действие, если False то другое?
Автор: ComradG
Дата сообщения: 09.07.2010 19:05
lorents
Гляди в сторону %errorlevel%
Автор: BVV63
Дата сообщения: 10.07.2010 08:45
Приветствую всех.
Помогите, пожалуйста, решить такую задачу. Потребовалось в переменную (ну, или в переменные, не суть) засунуть все актуальные файлы подкачки на сервере. Проблема в том, что параметр реестра "Paging Files" (под ключом [HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management]), описывающий их, имеет формат REG_MULTI_SZ, т. е. строки в его значении разделены парой символов "\0". Помаявшись и ничего не придумав, я решил всё значение запихать в переменную и работать уже с ней. В ней можно отталкиваться от символа(-ов) ":". Но тут потребуется счётчик (хотя бы для того, чтобы вернуться к литере раздела перед ":"). И я не знаю как с ним работать относительно переменной. Попробовал "If %PagingFiles:~%Counter%,1% ...", не хочет так работать. Как можно эту переменную грамотно отпарсить?

Добавлено:
Или, может можно обойтись без дополнительной переменной и всё же через For вытащить файлы подкачки? У меня не получилось...

Добавлено:
Ага, можно ведь и от пробелов в переменной отталкиваться, тогда может без счётчика получится. Сейчас попробую... ...Нет, без счётчика не получается...
Автор: mugil_cephalus
Дата сообщения: 10.07.2010 10:11
BVV63

Код: setlocal enabledelayedexpansion
set "cnt=1"
for /f "tokens=3" %%a in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles ^|more +4') do (
set "PagingFiles!cnt!=%%~a"
set /a cnt=!cnt!+1
)
set PagingFiles
pause
Автор: king_stiven
Дата сообщения: 10.07.2010 10:18
BVV63
С реестром не работаю, сформулируй попроще задачу. Типа вывод такой то(пример подробный). Если сложно , можно sed ом отпарсить. А вообще, ты вроде задавал этот вопрос?
Автор: Melhior
Дата сообщения: 10.07.2010 10:43
господа!
помогите, пожалуйста с кодом. задачка-то вроде простая, но никак у меня не выходит. подозреваю, что я так и не разобрался в скобках-кавычках... но может и нет.
при запуске батника он проверяет наличие в папке файла с неважно каким именем, но конкретным расширением. если он есть, то его имя передаётся как параметр программке, которая формирует текстовик с некоторой информацией об этом файле. после формирования текстовик открывается, после просмотра и закрытия - удаляется.
если же этого файла в папке нет - выдаём сообщение об ошибке.
всё! но вот никак я не могу добиться, чтобы else у меня срабатывало.
один из вариантов моего кода:

Код: @echo off
for %%i in (*.XXX) do (if exist %%i ('start /w PROG.EXE %%i') else (echo Error, no *.XXX file was found!))
start /w PROG_OUTPUT.TXT
del /q /f PROG_OUTPUT.TXT
pause
Автор: lorents
Дата сообщения: 10.07.2010 10:57
я использую программу Convert (входит в состав ImageMagick)
если я в командную строку ввожу

Код: C:\convert.exe C:\image.png -format "%A" info:
Автор: BVV63
Дата сообщения: 10.07.2010 11:04
king_stiven

Цитата:
А вообще, ты вроде задавал этот вопрос?

Нет, не задавал. Там было иное. Тогда я спрашивал, как определить размер переменной.

Цитата:
Типа вывод такой то(пример подробный).

Ну, типа:
c:\pagefile.sys 0 0\0d:\pagefile.sys 1024 2048\0e:\pagefile.sys 1024 1024
А я хотел получить в итоге:
c:\pagefile.sys d:\pagefile.sys e:\pagefile.sys (если одна переменная), либо
c:\pagefile.sys
d:\pagefile.sys
e:\pagefile.sys
если раскидывать по нескольким переменным

Добавлено:
mugil_cephalus
Консоль выдала ответ "Environment variable PagingFiles not defined".
Попробую разобраться, что творится, и почему неопределена переменная...
Автор: 01MDM
Дата сообщения: 10.07.2010 11:12
Melhior

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

В цикле обрабатываются только существующие файлы. Если нет ни одного соответствующего маске файла, то цикл даже не начнется. Проверяй до цикла:

Код:
@echo off

if not exist *.XXX echo Error && goto:eof

for %%i in (*.XXX) do start /w PROG.EXE "%%i"
start /w PROG_OUTPUT.TXT
del /q /f PROG_OUTPUT.TXT
pause

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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