Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] При конверте .bat в .exe не работают переменные

Ответить
Настройки темы
CMD/BAT - [решено] При конверте .bat в .exe не работают переменные

Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Здравствуйте, написал батник, при конверте которого в .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
Благодарности: 257

Профиль | Отправить PM | Цитировать


Попробуйте Bat to Exe Converter, при конвертации им ваш батник отрабатывает корректно.
%* - это все аргументы, переданные скрипту, без разбора на %1 - %9.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:38, 19-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Котяра

Ветеран


Сообщения: 2907
Благодарности: 331

Профиль | Отправить PM | Цитировать


DesmondTruman, я думаю, дело в том, что на самом деле компилятор создает, по сути, нечто вроде SFX-архива - т.е. программу EXE, которая при запуске создаёт батник в папке Temp. Поэтому %0 будет относиться к этому файлу в папке Temp.

Не сочтите за занудство... а не вирус ли пишете? Какой-то своеобразный функционал...
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 19-02-2012 | #3


Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Anonymоus Спасибо, вечером проверю и отпишусь.
Котяра Интересная мысль, проверю вечером изменив пару строчек.
Цитата:
Не сочтите за занудство... а не вирус ли пишете? Какой-то своеобразный функционал...
Да нет, что вы, какой вирус из батника)) Вы бы меня поняли, если бы имели дело с пользователями, кто не в состоянии нажать только два (а не 3-4-5) клика по программе.

Отправлено: 17:05, 19-02-2012 | #4


Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Котяра Всё совершенно правильно, так как вы и сказали. Проверил с echo %0 > log.txt .
И еще инфа c офиц. сайта программы :
читать дальше »
After compilation batch script become a binary file, so you not longer use any text from it. For example, you can not use "type %0" command to show batch source.
All batch scripts executed by a single system process "cmd.exe", so they can exchange environment variables. Every EXE file executed in separate system process and this exchange not allowed. You can only use return code.

И не пойму, почему же %0 действует относительно батника с temp, а например > log.txt действует относительно exeшника?


Anonymоus Скачал, проверил, увы так же как и "Quick Batch file compiler" создаёт bat в %temp%. Не понимаю как он у вас заработал...
Под словами "отрабатывает корректно" вы что имели в виду? То что вы запуcтили .exe файл и он стал невидимым и скопировал себя в %systemroot% ?

Есть какие то еще варианты, подобные %0, чтобы считывать свою дерикторию\имя\расширение ?

Отправлено: 20:05, 19-02-2012 | #5


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить 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
Или, что проще - в качестве working directory оставляете current directory (значение по умолчанию), в таком случае на скомпилированный экзешник будет указывать вот такая запись:
Код: Выделить весь код
%cd%\%~n0.exe
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:43, 19-02-2012 | #6


Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Anonymоus Спасибо вам огромное, работает.
Только я одного не понял, как вы узнали что в аргументе %1 передаётся путь ехешника?

Отправлено: 01:23, 20-02-2012 | #7


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


DesmondTruman, иногда бывает полезно читать справку к используемым программам, в случае с "Bat to Exe Converter", если отметить чекбокс "Submit current directory", то последним параметром как раз и будет передаваться реальный путь к экзешнику, а не распакованному батнику в %TEMP%. Так как других параметров при запуске у нас нету, то этот путь оказывается в %1.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:31, 20-02-2012 | #8


Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Anonymоus Я бы прочитал, если бы он был в программе, но его нет (по крайней мере в той, который вы дали), и на их сайте не увидел, поэтому и спросил.

Отправлено: 12:38, 20-02-2012 | #9


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] При конверте .bat в .exe не работают переменные

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Не работают некоторые команды в 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




 
Переход