Показать полную графическую версию : [решено] ResHacker.cmd
Пмогите написать батник для ResHacker.exe?
Мне надо чтоб файл лежал как обычно %ProgramFiles%\ResHacker\ResHacker.exe, но при этом корректно выполнялся в cmd.exe
Сначала, я просто накатал такое ResHacker.cmd:
@start C:\~\Apps\ResHacker\ResHacker.exe "%1" %*
( во-первых я лишь интуитивно понимаю смысл этого - "%*" )
Во-вторых, как мне показалось ResHacker игнорирует вольный ввод, и всё понимает буквально.
Вот его справка:
Command line scripts have 2 general forms:
1. Single commands:
ResHacker.exe command command_parameters
2. Multiple commands:
ResHacker.exe -script scriptfile
Single Commands:
command and command_parameters:
-add ExeFile, SaveAsFile, ResourceFile, ResourceMask
-addskip ExeFile, SaveAsFile, ResourceFile, ResourceMask
-addoverwrite ExeFile, SaveAsFile, ResourceFile, ResourceMask
-modify ExeFile, SaveAsFile, ResourceFile, ResourceMask
-extract ExeFile, ResourceFile, ResourceMask
-delete ExeFile, SaveAsFile, ResourceMask
Нужно нечто такое
@if "%1"=="" C:\~\Microsoft.NET\Framework\v2.0.50727\ilasm.exe & goto sh
@C:\~\Microsoft.NET\Framework\v2.0.50727\ilasm.exe "%1" %*
:sh
чтобы переменное количество параметров передавалось соответственно...
В двух словах, как зделать чтоб в одном случае было "%1" "%2", а в другом "%1" "%2" "%3" "%4" в зависимости от ввода?
Парни, вы что не умеете скрипты писать, неповерю? Или я что-то опять непонятное пишу?
вот два параметра комманд строки:
ResHacker.exe -script scriptfile
а вот пять
ResHacker.exe -add ExeFile, SaveAsFile, ResourceFile, ResourceMask
надо зделать так, чтоб батник передавал программе именно вводимое юзером количество параметров.
всего вариантов два! надо как-то это через IF логику организвать, я неумю :(
??
упс, я не прав, вот третьий вариант ещё {-extract ExeFile, ResourceFile, ResourceMask}
если параметров нет, то должен просто запуститься бинарь
@start %ProgramFiles%\ResHacker\ResHacker.exe
впрочем эту строку я и сам добавить могу, это уже не важно.
чтоб батник передавал программе именно вводимое юзером количество параметров. »
через параметры командной строки батника или путем запроса ввода с клавиатуры?
я не очень Вас понимаю. лишь бы работало! чем проще тем лучше...
у меня есть "традиция", я ко всем программам %ProgramFiles% храню батники в system32 на всякий случай,
но обычно там много не надо бывает, просто запуск из cmd.exe
А в данном случае ResHacker имеет поддержку коммандной строки и поэтому хочется чтобы всё это тоже работало. И возможно для других прог тоже пригодиться такое знание!
И было бы удобно тогда не вводя путь к ResHacker запустить его с параметрами в любой текущей директории...
я не очень Вас понимаю. лишь бы работало! »
как параметры батнику то передаются? При запуске с параметрами (file.bat /параметр) или после запуска батника в окно нужно что-то вводить?
Вам наверно проще сделать несколько ярлыков с разными параметрами запуска.
я всё ввожу в cmd.exe, либо ввод должен осуществляться любым файлом - temp.cmd, (не ResHacker.cmd)
так как будто он работает с обычным ...\ResHacker.exe
(просто чтобы не писать каждый раз пути к ...\ResHacker.exe в консоли и в скриптах temp.cmd.)
Вам наверно проще сделать несколько ярлыков с разными параметрами запуска. »
это как бы графический метод для десктопа! меня же интересует работа с консолью.
хотя можно написать много вариантов ResHacker1.cmd, и вызывать нужный
:) но это же не дело совсем, при этом надо запомнить какой для каких целей ))
Кстати, может вот так ....\ResHacker.exe "%1" "%2" "%3" "%4" "%5" "%6" "%7" и ещё и >NULL в конце добавить? Я пока пишу, надо тоже проверить... Разве лишнии параметры не должны игнорироваться? Или они будут как ввод восприниматься?
И для чего >null вообще обычно используют?
Мой пример выше для ilasm.exe хорошо показывает, что я хочу, но только он не совершенный.
ResHacker.cmd - это просто пернаправлятель всего ввода к самому файлу...
semiono, чем не устраивает:
* добавление путей в Path;
* если так любите команду start «xxx» — добавление приложения в подраздел «SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths» разделов HKLM/HKCU;
* создание aliases с помощью «doskey.exe»?
Зачем, в конце концов, как-то извращаться в пакетном файле, если банальный %* передаст весь набор параметров, сколько бы их ни было:
@echo off
echo.%*
"C:\Program Files\Resource Hacker\ResHacker.exe" %*
C:\Песочница\39>ResHack.cmd "1" 2 "3 4"
"1" 2 "3 4"
А так значит моя ошибка была в этом: "%1" %*
Понял! Достаточно только этого: %*
Зачем, в конце концов, как-то извращаться в пакетном файле, если банальный %* »
Вот и я об этом! Ну я же не знал. :)
\CurrentVersion\App Paths у меня итак всегда включен, так как я всё что только есть всегда использую!
Но это для меню Run подходит, но не для cmd.exe.
Всмысле, когда нет параметров тогда start самособой актуально и для батников.
Спасибо!
\CurrentVersion\App Paths у меня итак всегда включен, так как я всё что только есть всегда использую!
Но это для меню Run подходит, но не для cmd.exe.
Всмысле, когда нет параметров тогда start самособой актуально и для батников.
Вы не правы. Команда «start» использует «App Paths» (я подозреваю, что тут пользуется механизм ShellExecute(), но специально не проверял).
Попробуйте добавить содержимое такого файла в реестр:
ResHacker.exe.reg
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ResHacker.exe]
@="C:\\Program Files\\Resource Hacker\\ResHacker.exe"
и попробуйте выполнить такой пакетный файл:
DemoStart.cmd
@echo on
ResHacker.exe
start "" ResHacker.exe
На попытку выполнить «ResHacker.exe» из пакетного файла — Вы увидите отлуп:
"ResHacker.exe" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
а вот «start "" ResHacker.exe» запустит исполняемый файл, указанный в параметре по умолчанию в «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ResHacker.exe».
Точно так же, ничто не мешает использовать таким образом параметры, хоть в окне «Run», хоть в командной строке в команде «start».
Однако, на мой взгляд, для командной строки удобнее пользовать макросы doskey.exe. Создаёте, например, такой макрос:
doskey rh="C:\Program Files\Resource Hacker\ResHacker.exe" $*
Далее можно просто пользовать его из командной строки (не из пакетных файлов) наподобие:
rh param1 param2 … paramN
Макрос можно сохранить в файл и загружать при необходимости. Описание смотрите в справке:
hh.exe mk:@MSITStore:C:\WINDOWS\Help\ntcmds.chm::/doskey.htm
и в: CMD/BAT: Макросы DOSKEY — полезная вещь, которую не многие используют (http://forum.script-coding.info/viewtopic.php?id=3889).
Точно так же, если Вы постоянно работаете со скриптами Resource Hacker'а, можно облегчить себе жизнь следующим образом. Для этого следует завести для этих скриптов некое незанятое расширение (например, у меня не занято «.rh»). Зарегистрируем такой тип файлов и ассоциируем его с исполняемым файлом «ResHacker.exe»:
assoc .rh=ResourceHackerScript
ftype ResourceHackerScript="C:\Program Files\Resource Hacker\ResHacker.exe" -script "%1"
В принципе, этого уже достаточно для работы (можно ещё, конечно, поменять иконку, дать описание, создать дополнительные глаголы «Edit/Print/etc.» и т.п., но сие уже рюшечки). Создаёте некий скрипт для Resource Hacker'а, даёте ему расширение «.rh» (например «c:\My Scripts\My RH Script.rh»). После этого будет, например, работать такая команда:
start "" "c:\My Scripts\My RH Script.rh"
При этом будет опосредованно запущена такая команда:
"C:\Program Files\Resource Hacker\ResHacker.exe" -script "c:\My Scripts\My RH Script.rh"
На попытку выполнить «ResHacker.exe» из пакетного файла — Вы увидите отлуп: »
Вы имеете ввиду Ваш пакетный файл DemoStart.cmd, у меня открывается ResHacker.exe норамльно!
Хотя я не понял что значит "" здесь: start "" ResHacker.exe?
Может это Вы имели ввиду: start "C:\~\Apps\ResHacker\ResHacker.exe"
Ладно это не важно!
Хочу пояснить немножко суть всего. Я делаю самодельные инсталяторы программ.
При этом взял за правило использовать все фитчи системы.
То-есть установленное приложение, любое должно сразу быть готово запускаться
из Пуск > Выполнить, из консоли CMD.exe, из значка My Computer итп.
особо изощрённых способов не предполагается, но то что заложенно в системе то и используем.
Это я к тому что мне много таких батников надо, для всех программ, ResHacker это частный случай.
Я подсмотрел в реестре такую запись "%1" %* и не разобравшись стал юзать,
но как стало понятно позже, что это не удачный пример...
Хотя я задумался, а зачем там в реестре ms так написали?
Но похоже, что там был случай с точно определённым вызовом, то-есть точно 1 свитчер плюс %*
В моём же случае свитчер может вообще отсутствовать, в этом и проблемма... наверное?
Правда не ясно почему неправильно работает при 1 + несколько ключей? Но не важно!
Главное я понял такая маска %* работает действительно универсально!
Даже не знаю будет ли она обрабатыать пустой ввод, но по любому хорошо уже!
App Paths, как говорил уже ранее у меня всегда задействован, но возможно что
тут может возникнуть путаница в отношении CMD.exe промпта? Не знаю, но это всё неочевидно.
Не ясно какая именно ситуация... Вообще-то батник не противоречит пути в реестре, посему нет проблемы! ?
DOSKEY никогда не юзал, весьма интересно, хотя надо почитать, сразу не определиться насколько полезно...
Но определённо хорошо то, что это прога из дистрибутива windows, значит всегда есть и везде!
Как резюм хочу добавить, что тут ключевым является максимально юзать комманд строку,
вместо пакетного управления. Всё что пока можно втиснуть в комманду грубо говоря.
offtop: самый интересный с точки зрения исследования комманд строки это Directory Opus,
я глянул в хелп и увидел там тучи комманд, но у меня так и не заработало такое
"C:\~\Apps\DOpus\dopusrt.exe" /cmd Go "C:\~\system32" OPENINRIGHT (подсказка с его форума)
хотя справедливо и такое
"C:\~\Apps\DOpus\dopusrt.exe" /cmd Go PATH "C:\~\system32" OPENINRIGHT
в справке вообще написано OPENINRIGHT/S
одно только радует, это богатство комманд строки в проге! :)
Вы имеете ввиду Ваш пакетный файл DemoStart.cmd,…
Да.
…у меня открывается ResHacker.exe норамльно!
Первым вызовом («ResHacker.exe»)? Если Вы его не добавили путь в «Path» — не должно такого быть. Что-то Вы не договариваете. Сработает только вторая команда из пакетного файла — «start "" ResHacker.exe».
Хотя я не понял что значит "" здесь: start "" ResHacker.exe? Может это Вы имели ввиду: start "C:\~\Apps\ResHacker\ResHacker.exe"
Нет, не это. Зачастую путь в кавычках команда «start» воспринимает как заголовок окна, хоть тот числится как необязательный параметр:
Синтаксис:
start ["заголовок"] [/dпуть] [/i] [/min]…
Потому я предпочитаю помещать такого рода «заглушку» в виде пустого заголовка даже тогда, когда путь указывается без кавычек.
offtop: самый интересный с точки зрения исследования комманд строки это Directory Opus,
Боюсь Вас разочаровать, но сие не так. Воздержусь от язвительных комментариев в адрес «Directory Opus», но если нужна консоль и реальная командная строка под Win32/64 — это «Far Manager».
Far - это даже и не обсуждается. :)
Но я имел ввиду explorer - подобный "проводник", TotalCmd я не люблю... при всех его фитчах, слишком серо...
но спорить нет смысла, просто факт, что dopus 100% заточен под win7 о чём было заявленно.
А фар рулит! Yes! даже при моём скромном опыте в шелах
Если Вы его не добавили путь в «Path» — не должно такого быть. »
ась? :)
Iska, у меня в реестре всегда две записи, может об этом речь?
HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\ResHacker.exe",,0x0,"C:\~\Apps\ResHacker\ResHacker.exe"
HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\ResHacker.exe","Path",0x0,"C:\~\Apps\ResHacker"
path я тоже прописываю в регистри!
сейчас ещё один косяк исправил, вместо старого моего батника (Inno Setup)
@if "%1"=="" C:\~\Apps\Innosup\ISCC.exe & goto sh
@C:\~\Apps\Innosup\ISCC.exe "%1" %*
:sh
rem 0_0
достаточно было того:
@C:\~\Apps\Innosup\ISCC.exe %*
:)
Но я имел ввиду explorer - подобный "проводник", TotalCmd я не люблю... при всех его фитчах, слишком серо...
но спорить нет смысла, просто факт, что dopus 100% заточен под win7 о чём было заявленно. »
Ясно.
Если Вы его не добавили путь в «Path» — не должно такого быть.
ась?
Описался :). В оригинале подразумевалось: «Если Вы только не добавили его путь в [переменную окружения] «PATH» — не должно такого быть. … Сработает только вторая команда из пакетного файла — «start "" ResHacker.exe».
Iska, у меня в реестре всегда две записи, может об этом речь?
HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\ResHacker.exe",,0x0,"C:\~\Apps\ResHacker\ResHacker.exe"
HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\ResHacker.exe","Path",0x0,"C:\~\Apps\ResHacker"path я тоже прописываю в регистри! »
Я понял так, что указание «Path» в «App Paths» требуется тогда, когда требуемые библиотеки расположены по иному пути, нежели исполняемый файл (и не в путях, перечисленных в «PATH»): Errors in Windows XP applications that start by using the ShellExecute() function (http://support.microsoft.com/kb/837633). Ну, и, дополнительно, если потребуется:
Windows XP adds the path value, if it exists, to the PATH environment variable, if you use the ShellExecute() function to start your program.
для приложения и его дочерних процессов.
myhouse_1991
27-07-2010, 20:43
\CurrentVersion\App Paths у меня итак всегда включен, так как я всё что только есть всегда использую!
Но это для меню Run подходит, но не для cmd.exe.
Лучше поздно, чем никогда.
Недавно я изучал запуск функций из DLL файлов с помощью RUNDLL32.EXE и там есть одна DLL'ка - shell32.dll, которая как раз отвечает и за "Выполнить..." (функция ShellExec_RunDLL).
Если создать run.bat, положить в %windir% и вписать следующее:
@echo off
rundll32.exe shell32.dll, ShellExec_RunDLL %*
То получим чистую копию "Выполнить..." в командной строке
Примеры использования:
run explorer.exe /separate
run http://127.0.0.1
run msconfig
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.