-= DriveR =-, есть папка с всем содержимым, допустим папка tools. В ней уже лежит .ехе файл программы и папка test. В папке test лежит .bat файл и папка files.
Просто вместо папки test планируется много других аналогичных папок, и в зависимости от кнопки в приложении, будет запускался бы конкретный bat файл из нужной папки. Если прога лежит вместе с .bat файлом в папке test, то все работает. А если как на схеме, то не работает.
Этот топик читают: Гость
Ответов: 13
Рейтинг: 0
|
|||
карма: 1 |
|
Ответов: 817
Рейтинг: 52
|
|||
Значит я правильно тебя понял.
См. предыдущее сообщение, там все что тебе надо |
|||
карма: 1 |
| ||
Голосовали: | Pudrikello |
Ответов: 13
Рейтинг: 0
|
|||
-= DriveR =-, огромное человеческое спасибо, это работает! Но чем была суть если не секрет ?
|
|||
карма: 1 |
|
Ответов: 817
Рейтинг: 52
|
|||
Pudrikello писал(а): Но чем была суть если не секрет ?В правильном указании путей, как в батнике, так и в схеме |
|||
карма: 1 |
|
Ответов: 13
Рейтинг: 0
|
|||
-= DriveR =-, все таки как я и думал (плюс по содержанию батника видно), такое ощущение что все же программа временно копирует это батник к себе в директорию и оттуда уже запускает. Т.к. например если батник запустить напрямую, то он уже не срабатывает, а если скопировать на директорию выше (к ехешнику) то срабатывает)))
|
|||
карма: 1 |
|
Ответов: 817
Рейтинг: 52
|
|||
Pudrikello писал(а): программа временно копирует это батник к себе в директорию и оттуда уже запускаетНе выдумывай, программа составленная на HiAsm выполняет только то, что ты в нее заложил, не больше, не меньше Если интересно поэкспериментировать, то возьми свой нерабочий пример, в батнике последней строкой пропиши "Pause" и смотри что выдается в окне консоли, там все наглядно понятно. |
|||
карма: 1 |
|
Ответов: 13
Рейтинг: 0
|
|||
-= DriveR =-, ну хорошо, как тогда объясняется то что твой бат файл не работает если его напрямую запускать ?
В нем прописано: copy %cd%\test\files\1.mp3 %cd%\test\files\2.mp3 ... Хотя он сам находится в папке test и видеть ее не должен, вот и не срабатывает. Почему если запускаю его программой то он срабатывает, а если напрямую то нет ? Значит программа как то по другому запускает или что ? Собственно мой не рабочий пример это подтверждает. Вот зауск напрямую: А вот через прогу: |
|||
карма: 1 |
|
Ответов: 817
Рейтинг: 52
|
|||
Pudrikello писал(а): то что твой бат файл не работает если его напрямую запускать Есть понятие "Рабочая папка" Оно есть и в компоненте WinExec и в любом ярлыке виндовом Так вот рабочей папкой считается та папка, из которой стартует приложение. Улавливаешь ход мыслей? |
|||
карма: 1 |
|
Ответов: 13
Рейтинг: 0
|
|||
-= DriveR =-, так получается "Рабочая папка" меняется в зависимости от того как запускается bat файл, руками или через прогу ?
Я не программист, пытаюсь просто логически понять |
|||
карма: 1 |
|
Ответов: 817
Рейтинг: 52
|
|||
Pudrikello писал(а): так получается "Рабочая папка" меняется в зависимости от того как запускается bat файл, руками или через прогу ?Да. Обратите внимание на ваши скриншоты и пути. На первом видно, что copy пытается отработать в папке test, а на втором скриншоте - в папке app. |
|||
карма: 1 |
|
Ответов: 13
Рейтинг: 0
|
|||
-= DriveR =-, так вот и я об этом, разные пути отрабатывает. Поэтому и подумал про временное копирование, но оказалось вот оно что, про это я не знал.
|
|||
карма: 1 |
|
Ответов: 497
Рейтинг: 16
|
|||
\qaz\test\files\2.mp3
И вобще почему батником а не хиасм? И на край можно не готовый батник а генерировать с полними путями |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
RAWY_EX писал(а): И вобще почему батником а не хиасм?Для затравки http://forum.hiasm.com//getfile/37562 |
|||
карма: 25 |
|
Ответов: 824
Рейтинг: 138
|
|||
карма: 1 |
| ||
файлы: 1 | code_37642.txt [5.1KB] [374] |
Ответов: 163
Рейтинг: 33
|
|||
Pudrikello, я еще не прошлой странице советовал попробовать вставить первой строчкой в bat файл "cd /d %~dp0", но ты видно так и не попробовал.
-= DriveR =- писал(а): Есть понятие "Рабочая папка"Оно есть и в компоненте WinExec и в любом ярлыке виндовом Так вот рабочей папкой считается та папка, из которой стартует приложение. Улавливаешь ход мыслей? Абсолютно верно. Если не задействовать точку WorkingDir элемента WinExec, то ОС при запуске bat файла (а точнее говоря интерпретатора командной строки), автоматически установит для него ту же самую рабочую директорию что и у запускающей его программы (то есть твоей программы). Какова будет эта диретория - зависит от разных обстоятельств, она может и не соответствовать директории в которой находится твоя программа, но это в данном случае не важно. Важно что она не будет соответствовать директории в которой находится bat. Далее. Интерпретатор в команде copy попытается реконструировать полные пути к файлам, заменив files\x.mp3 на рабочая_директория\files\x.mp3. А так как рабочая директория запускающей программы не равна директории в которой находится bat, то интерпретатор по реконструированным путям ничего не найдет. Когда же ты запускаешь bat вручную из проводника, то проводник установит для запускаемого им (для обработки bat файла) интерпретатора рабочую директорию равную папке из которой ты запустил bat. В этом случае реконструированные пути окажутся верными и bat отработает корректно. Что дает строка cd /d %~dp0 в bat файле? Команда cd заставит интерпретатор сменить текущий каталог (это то же самое что и рабочая директория). Ключ /d здесь для страховки, на случай если bat файл и запускающая его программа находятся на разных дисках. Конструкция %~dp0 будет заменена интерпретатором на полный_путь_к_директории_расположения_bat_файла (вместе с завершающим слэшом). В результате как бы ты не запустил bat файл (вручную либо через другую программу), он всегда отработает одинаково. PS Как вариант, вместо строки cd /d %~dp0 в начале файла, можно добавлять модификатор %~dp0 в команду copy, например, copy %~dp0test\files\1.mp3 %~dp0test\files\2.mp3. Но по-моему это лишние телодвижения. Также, как вариант, можно не менять bat файл, а вместо этого подать на точку WorkingDir элемента WinExec полный путь к папке расположения bat файла. |
|||
карма: 3 |
| ||
Голосовали: | Galkov, Sniper36, Pudrikello |
30