Показать полную графическую версию : [решено] Скомпилированный из "батника" exe работает только в папке с исходниками.
Uragan66
10-05-2019, 22:08
Доброго времени суток всем!
Может у кого была подобная проблема, что посоветуете.
Написал батник для замены нужного текста в различных текстовых файлах. В основе консольная утилита nhrt (nhreplace)
Для удобства пользования скомпилировал программой Quick Batch File Compiler исполняемый exe файл.
Но вот незадача, что батник, что exe нормально отрабатывают только в папке с исходниками. С других папок запускаются, но половина команд не обрабатывается. Что-то неправильно с путями.
Сам bat файл:
@echo off
chcp 1251 >nul
"%MYFILES%\url.vbs"
@echo move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%"
cd "%MYFILES%"
start /wait "" "%MYFILES%\nhrt.exe" -list:delete_group.txt plist_tv.m3u
start /wait "" "%MYFILES%\nhrt.exe" -list:replace_list.txt plist_tv.m3u
TIMEOUT /T 5 /NOBREAK
@echo move /Y "C:\Users\Uragan66\AppData\Local\plist_tv.m3u J:\Download\Compressed\nhrt"
exitПервая часть работает из любой папки, плейлист скачивается и копируется в нужную папку. Но вот команды с nhrt работают только в папке с исходниками.
Подскажите, пожалуйста, что в нём не так ?
если код выше полный, то где назначение переменной %MYFILES% ?
если неполный, то вижу что на разных дисках работа идет, а командой "cd" можно переходить только в пределах текущего диска, для перехода и с учетом диска надо использовать ключ /d, вот так: cd /d "Диск:\Папка"
Uragan66
10-05-2019, 23:40
где назначение переменной %MYFILES% ?
alpap, переменную %MYFILES% использует только компилятор Quick Batch File Compiler, так для него именуется папка C:\Users\User\AppData\Local, в неё временно помещаются файлы упакованные в исполняемый exe.
cd /d "Диск:\Папка" пробовал - безрезультатно. Вернее из ком. строки работает, если использовать путь C:\Users\User\AppData\Local, из скомпилированного exe не хочет.
megaloman
11-05-2019, 06:01
Uragan66, а если попробовать вместо Cd после Chcp
Pushd "%MYFILES%\"
и, соответственно, далее в коде убрать все поминания на %MYFILES%\
Кстати, а где находится утилита nhrt.exe? Она тоже распаковывается в эту злополучную папку %myfiles% ? Она там присутствует?
Может быть, надо указать полный реальный путь к ней? Или скопировать её в папку прописанную в параметрах системы в путях, например, windows\system32, соответственно убрав при вызове утилиты всё то же %MYFILES%\
Uragan66
11-05-2019, 07:34
а если попробовать вместо Cd после Chcp
Pushd "%MYFILES%\"megaloman, спасибо. Попробовал и так, не срабатывает утилита nhrt.exe.
Кстати, а где находится утилита nhrt.exe? »
Она то вместе с другими нужными файлами распаковывается в папку %MYFILES%, (проверял, после запуска исполняемого файла, все нужные файлы там есть) на моём компе C:\Users\%UserName%\AppData\Local\. Пробовал и этот путь указывать вместо %MYFILES%, безрезультатно. Не хочет nhrt.exe работать и всё тут.
P.S. нужно наверное только прописывать путь для nhrt.exe в PATH. Но как это правильно прописать в моём bat файле ?
C:\Users\%UserName%\AppData\Local\. Пробовал и этот путь указывать вместо %MYFILES%, безрезультатно. »
Ну, а если таки выполнить всё по порядку, как это описано в документации?
Как минимум, для теста:
@echo off
rem Непонятно зачем здесь это, поэтому пока сделаем так:
rem chcp 1251 >nul
set "MYFILES=C:\Users\%UserName%\AppData\Local\"
"%MYFILES%\url.vbs"
@echo move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%"
rem cd "%MYFILES%"
pushd "%MYFILES%"
start "" /D "%MYFILES%" /wait "nhrt.exe" "-list:delete_group.txt plist_tv.m3u"
start "" /D "%MYFILES%" /wait "nhrt.exe" "-list:replace_list.txt plist_tv.m3u"
TIMEOUT /T 5 /NOBREAK
popd
@echo move /Y "C:\Users\Uragan66\AppData\Local\plist_tv.m3u J:\Download\Compressed\nhrt"
pause&exit /b
и ещё требует уточнения:
где расположены:
replace_list.txt
delete_group.txt
plist_tv.m3u
?
Uragan66
11-05-2019, 09:19
а если таки выполнить всё по порядку »
Из ком.строки все команды по порядку выполняются без ошибок, но утилита nhrt.exe файл plist_tv.m3u не обрабатывает, на выходе он без изменений.
где расположены:
Цитата:
replace_list.txt
delete_group.txt
plist_tv.m3u »
Файлы replace_list.txt и delete_group.txt компилируются в исполняемый файл, после его запуска распаковываются в %MYFILES%. plist_tv.m3u создаётся скриптом url.vbs в папке J:\Download\Compressed\nhrt\, потом перемещается тоже в %MYFILES%. Просто не хотел указывать в vbs эту злополучную папку %MYFILES%, все скрипты и программы почему-то видят её по-разному.
plist_tv.m3u создаётся скриптом url.vbs в папке J:\Download\Compressed\nhrt\, потом перемещается тоже в %MYFILES%. »
каким образом он перемещается?
так:
@echo move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%" »
- он не переместится никогда...
Uragan66
11-05-2019, 11:21
каким образом он перемещается?
так:
Цитата Uragan66:
@echo move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%" »
- он не переместится никогда... »
YuS_2, да, Вы правы. Просто планировалось вывод в лог, да так и забыл убрать @echo. Командой move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%" файл plist_tv.m3u перемещается, но проблемы это не решило. Утилита nhrt.exe упорно не хочет обрабатывать его.
Uragan66
11-05-2019, 11:54
Путём взаимоисключения пришел к такому коду:
@echo off
set "MYFILES=C:\Users\%UserName%\AppData\Local\"
pushd "%MYFILES%"
url.vbs
move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%"
TIMEOUT /T 2 /NOBREAK
start nhrt.exe -list:delete_group.txt plist_tv.m3u
TIMEOUT /T 2 /NOBREAK
start nhrt.exe -list:replace_list.txt plist_tv.m3u
TIMEOUT /T 3 /NOBREAK
popd
move /Y "%MYFILES%\plist_tv.m3u" J:\Download\Compressed\nhrt
exit
Так программа nhrt.exe отрабатывает как положено. Но пришлось добавить временную задержку, со start /wait не хочет всёравно работать.
Спасибо всем за подсказки!
Но пришлось добавить временную задержку, со start /wait не хочет всёравно работать. »
а зачем вообще тут start?
Так:
...
"%MYFILES%nhrt.exe" -list:delete_group.txt plist_tv.m3u
"%MYFILES%nhrt.exe" -list:replace_list.txt plist_tv.m3u
...
оно разве не работает?
Uragan66
11-05-2019, 13:16
YuS_2, спасибо за совет. Работает отлично и без временной задержки. Просто пробовал все варианты, да и оставил в коде start.
Сейчас код сократился до такого:
@echo off
pushd "%MYFILES%"
url.vbs
move /Y J:\Download\Compressed\nhrt\plist_tv.m3u "%MYFILES%"
nhrt.exe -list:delete_group.txt plist_tv.m3u
nhrt.exe -list:replace_list.txt plist_tv.m3u
move /Y "%MYFILES%\plist_tv.m3u" J:\Download\Compressed\nhrt
exit
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.