|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] При конверте .bat в .exe не работают переменные |
|
|
CMD/BAT - [решено] При конверте .bat в .exe не работают переменные
|
Пользователь Сообщения: 78 |
Здравствуйте, написал батник, при конверте которого в .exe через программу "Quick Batch file compiler" перестают работать некоторые %переменные%.
Сам батник работает, но при конверте которого в .exe перестаёт работать. Чтобы понять в чём проблема, оставил батнике лишь строчку attrib +h %0 и переконвертировал в .exe и запустив, понял, что не работают переменныя %0 и скорей всего остальные его расширения. @echo off attrib +h %0 if not exist "%systemroot%\%~nx0" echo F | xcopy %~nx0 "%systemroot%\%~nx0" /h /y if %0=="%systemroot%\%~nx0" goto end echo del /f /q /a h %~nx0 > un%~n0.bat attrib +h un%~n0.bat echo del /f /q /a h un%~n0.bat >> un%~n0.bat start /min cmd /C un%~n0.bat :end exit @echo off rem Делаем себя скрытым attrib +h %0 rem Проверяем есть ли наша копия в %systemroot%, если нету копируем себя туда if not exist "%systemroot%\%~nx0" echo F | xcopy %~nx0 "%systemroot%\%~nx0" /h /y rem Проверяем свою директорию с %systemroot%, если мы находимся в %systemroot%, то заканчиваем сценарий. Это чтобы мы не удалили себя же когда будет находиться в %systemroot%. if %0=="%systemroot%\%~nx0" goto end rem Создаём батник, который удалит первый батник, потом себя. echo del /f /q /a h %~nx0 > un%~n0.bat echo del /f /q /a h un%~n0.bat >> un%~n0.bat rem Делаем созданный батник скрытым attrib +h un%~n0.bat rem Запускаем второй батник и заканчиваем сценарие start /min cmd /C un%~n0.bat :end exit Как преодолеть эту проблему, что можно сделать? Ps: Тут вопросик всплыл, что за переменная %* ? Видел в чужих сценариях. |
|
Отправлено: 16:09, 19-02-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Попробуйте Bat to Exe Converter, при конвертации им ваш батник отрабатывает корректно.
%* - это все аргументы, переданные скрипту, без разбора на %1 - %9. |
Отправлено: 16:38, 19-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 2907
|
Профиль | Отправить PM | Цитировать DesmondTruman, я думаю, дело в том, что на самом деле компилятор создает, по сути, нечто вроде SFX-архива - т.е. программу EXE, которая при запуске создаёт батник в папке Temp. Поэтому %0 будет относиться к этому файлу в папке Temp.
Не сочтите за занудство... а не вирус ли пишете? Какой-то своеобразный функционал... |
Отправлено: 16:40, 19-02-2012 | #3 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Anonymоus Спасибо, вечером проверю и отпишусь.
Котяра Интересная мысль, проверю вечером изменив пару строчек. Цитата:
|
|
Отправлено: 17:05, 19-02-2012 | #4 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Котяра Всё совершенно правильно, так как вы и сказали. Проверил с echo %0 > log.txt .
И еще инфа c офиц. сайта программы : И не пойму, почему же %0 действует относительно батника с temp, а например > log.txt действует относительно exeшника? Anonymоus Скачал, проверил, увы так же как и "Quick Batch file compiler" создаёт bat в %temp%. Не понимаю как он у вас заработал... Под словами "отрабатывает корректно" вы что имели в виду? То что вы запуcтили .exe файл и он стал невидимым и скопировал себя в %systemroot% ? Есть какие то еще варианты, подобные %0, чтобы считывать свою дерикторию\имя\расширение ? |
|
Отправлено: 20:05, 19-02-2012 | #5 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать DesmondTruman, прошу прощения, не до конца протестировал.
Выбираете при компиляции на первой вкладке, там, где Working directory - temporary directory (он все равно во временной создаваться будет, это похоже болезнь всех подобных "компиляторов"), отмечаете чекбокс "submit current directory" - в %1 будет путь к тому месту, откуда запускается откомпилированый экзешник. И правите код скрипта, как в этом примере: @echo off rem Делаем себя скрытым attrib +h "%~dp1%~n0.exe" rem Проверяем есть ли наша копия в %systemroot%, если нету копируем себя туда if not exist "%systemroot%\%~n0.exe" echo F | xcopy "%~dp1%~n0.exe" "%systemroot%\%~n0.exe" /h /y rem Проверяем свою директорию с %systemroot%, если мы находимся в %systemroot%, то заканчиваем сценарий. Это чтобы мы не удалили себя же когда будет находиться в %systemroot%. if "%~dp1%~n0.exe"=="%systemroot%\%~n0.exe" goto end rem Создаём батник, который удалит первый батник, потом себя. echo del /f /q /a h "%~dp1%~n0.exe" > "%~dp1un%~n0.exe" echo del /f /q /a h "%~dp1un%~n0.exe" >> "%~dp1un%~n0.exe" rem Делаем созданный батник скрытым attrib +h "%~dp1un%~n0.exe" rem Запускаем второй батник и заканчиваем сценарие start /min cmd /C "%~dp1un%~n0.exe" :end exit |
Отправлено: 21:43, 19-02-2012 | #6 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Anonymоus Спасибо вам огромное, работает.
Только я одного не понял, как вы узнали что в аргументе %1 передаётся путь ехешника? |
Отправлено: 01:23, 20-02-2012 | #7 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать DesmondTruman, иногда бывает полезно читать справку к используемым программам, в случае с "Bat to Exe Converter", если отметить чекбокс "Submit current directory", то последним параметром как раз и будет передаваться реальный путь к экзешнику, а не распакованному батнику в %TEMP%. Так как других параметров при запуске у нас нету, то этот путь оказывается в %1.
|
Отправлено: 01:31, 20-02-2012 | #8 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Anonymоus Я бы прочитал, если бы он был в программе, но его нет (по крайней мере в той, который вы дали), и на их сайте не увидел, поэтому и спросил.
|
Отправлено: 12:38, 20-02-2012 | #9 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать fdko.de ⇒ Bat to Exe Converter ⇒ Download ⇒ Bat_To_Exe_Converter.zip ⇒ help.chm ⇒ English ⇒ Options ⇒ • Submit current directory Submit the current directory as the last parameter
Вот тут об этом было написано, файл помощи лежит прямо в корне скачиваемого с сайта архива с программой. |
Отправлено: 13:09, 20-02-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - [решено] Не работают некоторые команды в cmd.exe | Dosmod | Microsoft Windows 7 | 17 | 02-06-2015 03:01 | |
Службы - [решено] Не работают exe файлы | an426 | Microsoft Windows Vista | 5 | 20-11-2011 16:59 | |
CMD/BAT - [решено] Bat в exe | Odessa780 | Скриптовые языки администрирования Windows | 3 | 22-07-2011 16:25 | |
CMD/BAT - [решено] Bat файлы не работают без DOS | kilogen | Скриптовые языки администрирования Windows | 8 | 13-06-2011 07:07 | |
CMD/BAT - [решено] Не работают Bat файлы. | mithell | Скриптовые языки администрирования Windows | 8 | 20-05-2010 10:18 |
|