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

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

Автор: ComradG
Дата сообщения: 29.05.2010 16:05
01MDM

Код:
@echo off
1>nul chcp 1251
setlocal
cls

set "answer=y"
set /p answer="Choose your destiny? (Y|n): "
if /i "%answer%"=="y" goto:ready
if /i "%answer%"=="n" echo XD && goto:eof
echo А вы что, собственно, имели ввиду?
goto:eof

:ready
echo FIGHT!
1>nul pause
Автор: NIKZZZZ
Дата сообщения: 29.05.2010 16:07
ComradG

Цитата:
как с помощью батника создать ярлык?

Стандартными средствами, по моему не возможно, пытался это сделать. Проще использовать внешнюю прогу, типа nircmd, либо сгенерить батником маленький VBS скрипт, выполнить его и удалить.
Автор: 01MDM
Дата сообщения: 29.05.2010 16:13
ComradG

Цитата:
хотелось бы все ручками.

Не знаю, пошукай на предмет примеров с rundll32, оно может вызвать диалог "мастер нового ярлыка".
Автор: ComradG
Дата сообщения: 29.05.2010 16:16
Кстати, совсем забыл.
us0r
В конце своего батника не забудь удалить переменные. Напомню, что оное нужно, если после выполнения батника сессия в командной строке не должна быть окончена. Также напоминаю как это делается:
set имя_переменной=

Добавлено:
NIKZZZZ
Спасибо, идея мне нравится!

01MDM

Цитата:
Не знаю, пошукай на предмет примеров с rundll32, оно может вызвать диалог "мастер нового ярлыка".

Да ты гений! Спасибо!
Автор: 01MDM
Дата сообщения: 29.05.2010 16:20
ComradG

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

Если в начале батника стоит `setlocal`, то это явно лишнее. Setlocal ограничивает видимость переменных контекстом батника. Попробуй выполнить из консоли батник:

Код:
@echo off
set test_0=1
setlocal
set test_1=1
Автор: ComradG
Дата сообщения: 29.05.2010 16:29
Я знаю, просто лишних проверок, а в данном случае удалений, не бывает NIKZZZZ, слушай, (я все по поводу идеи с ярлыком), а ты пробовал как-то рулить темой посредством wmic или нет? 01MDM Пока что у меня получилось вызвать гуишного мастера из командной строки.
Автор: 01MDM
Дата сообщения: 29.05.2010 16:42
ComradG

Цитата:
а ты пробовал как-то рулить темой посредством wmic или нет?

Может это и реально, если обращаться непосредственно к определенному классу, но во всяком случае псевдонимы fsdir и datafile такой возможности не прeдставляют:

Код:
wmic fsdir create /?
wmic datafile create /?
Автор: us0r
Дата сообщения: 29.05.2010 17:15
Всем благодарю.
А насчёт ярлыка- а передать параметры функции вызывающий GUI-шный инсталлер никак?

Добавлено:
[more]
P.S.:

Цитата:
@echo off
1>nul chcp 1251
setlocal
cls

set "answer=y"
set /p answer="Choose your destiny? (Y|n): "
if /i "%answer%"=="y" goto:ready
if /i "%answer%"=="n" echo XD && goto:eof
echo А вы что, собственно, имели ввиду?
goto:eof

:ready
echo FIGHT!
1>nul pause


Чёт он каряво работает.
Не отабатывает вторая и последняя строка.

Вроде нормально работает:

Код: @echo off
setlocal
cls

set "answer=y"
set /p answer="Do it? (y|n): "
if /i "%answer%"=="y" goto:ready
if /i "%answer%"=="n" echo Your answer is NO! && goto ololo
echo WTF?
goto ololo

lolo
goto eof

:ready
echo YES!
pause > nul
Автор: 01MDM
Дата сообщения: 29.05.2010 18:05

Цитата:
Не отабатывает вторая и последняя строка.

У меня все отрабатывает. Какая версия виндовс?


Цитата:
Кстати косяк- если не вводить ничего и сразу нажать ВВОД, то получим %answer% = y

Так и задумано. Значение "Y" по умолчанию.

Автор: SLIDER999
Дата сообщения: 29.05.2010 19:22
Знатоки, вот что получилось в итоге: Теперь нужно сделать автоответ через Х секунд

Цитата:
@echo off
TITLE Џ®¦ «г©бв , Ї®¤®¦¤ЁвҐ!

::Воспроизведение звука

cls
ping -n 2 127.0.0.1 >Nul

cls

::Автоответ ДА
set "answer=y"

otNET
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\777
cls
if %ERRORLEVEL%==1 goto Office
echo.
echo. …б«Ё б®Ј« б-л б ў®Їа®б®¬ Ї®¤вўҐа¦¤ ©вҐ, - ¦ ў ENTER
echo. ‚ ®бв «м-ле б«гз пе Ўг¤Ґв ®вўҐв Ќ…’
echo.
echo.
set /p answer="•®вЁвҐ гбв -®ўЁвм .NET Framework? "
if /i "%answer%"=="y" (
goto:Office
) else (
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\777 /f
)

ffice
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\888
cls
if %ERRORLEVEL%==1 goto EOF
echo.
echo. …б«Ё б®Ј« б-л б ў®Їа®б®¬ Ї®¤вўҐа¦¤ ©вҐ, - ¦ ў ENTER
echo. ‚ ®бв «м-ле б«гз пе Ўг¤Ґв ®вўҐв Ќ…’
echo.
echo.
set /p answer="•®вЁвҐ гбв -®ўЁвм MS Office 2007? "
if /i "%answer%"=="y" (
goto:EOF
) else (
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\888 /f
)



П.С.
конструкция

Цитата:
1>nul chcp 1251
setlocal
не работает - кравазябры все равно отображаются, поэтому пользуюсь привычным методом - перевожу в ОЕМ
Автор: 01MDM
Дата сообщения: 29.05.2010 19:33

Цитата:
не работает - кравазябры все равно отображаются,

Какой шрифт в консоли? Хоть мне и не нравится штатный Lucida Console, использую Consolas, но он спасет.
Автор: SLIDER999
Дата сообщения: 29.05.2010 19:57
01MDM
этот батник будет запускаться из cmdlines, поэтому все по-умолчанию
Автор: 01MDM
Дата сообщения: 29.05.2010 20:59
SLIDER999

Цитата:
этот батник будет запускаться из cmdlines

Это что за зверь? Сценарий для установки? Тогда конечно лучше сохранять в OEM.
Автор: mugil_cephalus
Дата сообщения: 30.05.2010 06:37
по сабжу ярлыка
если удастся в cli "скрестить" filename.ext и %USERPROFILE%\SendTo\*.DeskLink (там мудрено - не через assoc/ftype , а через реестр; мне пока не удавалось)

Добавлено:
mbku14

Цитата:
А где взять sed?

sed - мощный текстовый фильтр/процессор с поддержкой регулярных выражений
p.s. regular expressions
Автор: ComradG
Дата сообщения: 30.05.2010 13:11
SLIDER999
Я так понимаю у тебя проблемы с отображением русского шрифта при установленной локали 866? Чувак! это просто решается: берешь FAR, жмешь Shift+F4 (создание нового файла), вбиваешь имя будущего батника (с расширением, разумеется), клацаешь по пимпе Ентр. Далее откроется окно редактора, в котором переключаешь кодировку по F8 в досовскую и валяй текст хоть на супостатском аглицком, хоть на великом и могучем. После чего сохраняешь свое творение по F2. Выход из редактора по эскейпу. У всех, кому я советовал, подобное работает, и даже более того - у всех отпала нужда дрюкаться с кодировками
mugil_cephalus
Относительно реестра - подобная мысль меня также посещала, ну хотя бы потому, что в Classes имеется запись о файлах с расширением .lnk Также я подумал вот о чем: в сущности файл .lnk - это текстовый документ с несовсем адекватной кодировкой, в котором прописаны пути до бинарика >)
01MDM
Похоже, что через rundll32.exe можно вызвать только гуишного мастера что не есть гуд. А попытки создать ярлык через wmic также терпят фиаско. Ты был прав!)

Единственное, что прокатывает на данный момент - это генератор vbs-ки, следующего содержания (это только пример):

Код:
Dim WSHShell, fs
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Function MakeDesktopShortcut( name, target )
Dim Shortcut,DesktopPath,StartupPath
DesktopPath = WSHShell.SpecialFolders("Desktop")
Set Shortcut = WSHShell.CreateShortcut(DesktopPath & "\" & name & ".lnk")
Shortcut.TargetPath = target
StartupPath = fs.GetParentFolderName( target )
If fs.FolderExists( StartupPath ) then
Shortcut.WorkingDirectory = StartupPath
End If
Shortcut.Save
End Function
MakeDesktopShortcut "Cool Shortcut", "C:\Program Files\CoolSoft\-CoolProg.exe"
Автор: king_stiven
Дата сообщения: 30.05.2010 16:55
ComradG

Цитата:
Слуууушайте, а если попробовать поступить так:
1)Вручную создаем ярлык в папке с программой;
2)Открываем его с помощью текстового редактора и копируем содержимое в буффер;
3)С помощью команды echo пытаемся выввести инфо из буффера в файл .lnk

Не получится, ярлык это бинарный файл.
Автор: cluster
Дата сообщения: 30.05.2010 16:57
ComradG

Цитата:
Слуууушайте, а если попробовать поступить так:

Мои мысли читаешь))
Только нифига через текстовый редактор не получится. Нужно копировать hex и вставлять hex.
Автор: us0r
Дата сообщения: 30.05.2010 17:58
01MDM

Цитата:
У меня все отрабатывает. Какая версия виндовс?

XP SP3

Цитата:
Чувак! это просто решается: берешь FAR

TrueWay! Yeah!
С тем же успехом чапаем в блокнот шрифт-terminal (или берём заменители блокнота способные сохранить то, что надо в 866 локали) и не паримся... При желании @echo SomeText >> disk:\path\somefile.txt никто не отменял.
SLIDER999
Риальне, консоль тебя спасёт- получишь +1 к навыку "Шоманскай бубен". Как вариант- замена блокноту или в шапке- линка на перекодировщик.
Автор: ComradG
Дата сообщения: 30.05.2010 19:19

Цитата:
Только нифига через текстовый редактор не получится. Нужно копировать hex и вставлять hex.

Я это уже понял, но

Цитата:
это бинарный файл

не совсем верно. Бинарики - это одно, а вот линки, это всего лишь набор сведений о путях до бинарика как токового (я не выпендриваюсь, просто перечитай Wininternals Руссиновича, кажись самое первое издание).
Попытка создать линк через

Код:
rundll32.exe appwiz.cpl,NewLinkHere [имя_линка(с полным путем)] имя_бинарика
Автор: 01MDM
Дата сообщения: 30.05.2010 20:14
ComradG

Цитата:

1>nul chcp 1251
1>nul pause

Паузы нет? Кодировка не меняется? Что-то не верится.
Автор: ComradG
Дата сообщения: 30.05.2010 20:17
И напоследок немного о ярлыках (немного не по теме)...

В одном из постов выше я упомянал о PowerShell, но тогда это касалось сравнения файлов. В данном же случае речь идет о ярлыках. Всем хорошо известен факт, что в своей работе PowerShell опирается на классы .NET Framework'а. Я тут покумекал и пришел к следующему выводу, если использовать класс System.Environment в купе с методом GetFolderPath, можно создать ярлык где угодно. Например,я хочу создать ярлык в меню "Пуск":

Код: $linkPath = [Sysem.Environment]::GetFolderPath("StartMenu")
Автор: 01MDM
Дата сообщения: 30.05.2010 20:30
ComradG

Цитата:
В одном из постов выше я упомянал о PowerShell

Здесь оффтоп. Топ же здесь: http://forum.ru-board.com/topic.cgi?forum=62&active=15&topic=7221#1
Автор: ComradG
Дата сообщения: 30.05.2010 20:48
Про оффтоп знаю, просто говорю, что трабла решаема, но не через cmd.exe напрямую. Спасибо всем за идеи и поддержку, тема создания ярлыков из командной строки закрыта.
Автор: SLIDER999
Дата сообщения: 30.05.2010 21:04
пользуюсь безо всяких проблем notepad2. там легко за пару секунд можно изменить ОЕМ - ANSI
Главный вопрос был не в этом, а в том, как сделать автоответ ДА на команду set /p
Автор: TTTT555
Дата сообщения: 30.05.2010 21:58
Есть такой код:

Код: SET IP=C:\ip.txt
ipconfig|FIND "172" > %IP%
C:\MyProgram.exe C:\MyScript.lua -ip %IP%
Автор: 01MDM
Дата сообщения: 30.05.2010 22:22
TTTT555

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

Попробуй такой вариант:

Код:
@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4-.*:.172\."') do set "ip=%%i"

C:\MyProgram.exe C:\MyScript.lua -ip %ip%
Автор: TTTT555
Дата сообщения: 30.05.2010 22:40
01MDM

Цитата:
Попробуй такой вариант:

Код:
@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4-.*:.172\."') do set "ip=%%i"

C:\MyProgram.exe C:\MyScript.lua -ip %ip%
Автор: mugil_cephalus
Дата сообщения: 31.05.2010 06:22
ComradG
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=23&limit=1&m=1#1
это уже было -
Цитата:
Возможно ли с помощью батника создать ярлык к файлу?
- http://forum.ru-board.com/topic.cgi?forum=62&topic=6156#20
а вообще ярлыки делает консольная утилита shortcut.exe (кажется, входит в какой-то ресурс кит)
Автор: igor_andreev
Дата сообщения: 31.05.2010 10:12
wolf0425

Цитата:
как бы в sed сделать скрипт на удаление группы строк:
первая строка группы содержит string1
последняя строка группы является ближайшей содержащей string2

Намедни прямо противоположную задачу(извлечь параграф из текста) делал так:

Код:
type name.txt | sed -e "1,/string1/d" | sed -e "/string2/,$d"
Автор: wolf0425
Дата сообщения: 31.05.2010 10:42

Цитата:
Намедни прямо противоположную задачу(извлечь параграф из текста) делал так:
Удалил то есть всё от первой строки до string1 и от string2 до конца текста.

инвертировать чего-то не получается: sed -r -e "/string1/,/strind2/ d" удаляет строки начиная с string1 даже если strind2 в тексте нету. наверно чего то туплю и оно как-то просто делается.

кстати, в твоем случае второй запуск sed можно было не делать, а просто первому sed прописать две команды:
type name.txt | sed -e "1,/string1/d" -e "/string2/,$d"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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