Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
1

Аналог конструкции "%~dp0/bin/x64/factorio.exe" --version > version.txt на pascalABC.net

29.03.2020, 16:47. Показов 1534. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, я хочу написать аналог этой конструкции: "%~dp0/bin/x64/factorio.exe" --version > version.txt (.bat) на языке pascalABC.net.
Я думал, что это может сработать:
Pascal
1
ver:=exec('путь до файла', '--version');
Но exec - это процедура, а не функция.
Я бы хотел, чтобы вы предложили аналог этой конструкции.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2020, 16:47
Ответы с готовыми решениями:

This version of ChromeDriver only supports Chrome version 108 Current browser version is 115.0.5790.102
Прошу подсказать, как поправить. from selenium import webdriver from...

[DCC Fatal Error] firemonkey.dpr(6): F2048 Bad unit format: 'main.dcu' - Expected version: 23.0, Windows Unicode(x64) Found version: 23.0, Windows Uni
На одном из буржуйских форумов нарыл что компонент Delphi Chromium Embedded можно использовать для...

Ошибка cannot be opened because it is version 782. This server supports version 706 and earlier
Есть проект для которого база данных (далее-БД) создается с использованием Code First При сборке...

Какая разница в живом спецификации Multipage Version от Developer Version ?
Какая разница в живом спецификации Multipage Version от Developer Version ? ...

Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3
ребят почему так пишет Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower...

14
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 19:28 2
1. Exec не только процедура, но ещё и огрызок. Для начала зажмите Ctrl и нажмите на Exec (в IDE, конечно), увидите это:
Pascal
1
2
3
4
procedure Exec(filename: string);
begin
  System.Diagnostics.Process.Start(filename)
end;
Вот Process.Start - это уже функция. Вот только она возвращает запущенный процесс. Это почти, но, вроде, не то что надо.

2. Как раз насчёт того что надо - --version это аргумент командной строки. Каждый .exe по своему обрабатывает свои аргументы (или не обрабатывает вообще). А значит не имея факторио на компе - невозможно знать наверняка, что значит:

Цитата Сообщение от Olil Посмотреть сообщение
аналог этой конструкции
Поэтому - выражайтесь конкретнее.

Добавлено через 10 минут
3. Ну, факторио я как раз хотел поставить на новый пк, но с моим инетом - это не быстро. Тем временем, если я всё же правильно догадался - получается как то так:
Если передать --version, вместо запуска факторио - запустится консоль и выведет версию игры.

В таком случае - перед запуском процесса надо его настроить, точнее перенаправить его вывод в программу на PABC.Net:
Pascal
1
2
3
4
5
6
7
8
9
10
11
uses System.Diagnostics;
 
begin
  var p := new Process;
  p.StartInfo.FileName := 'factorio.exe'; // остальное путь сами вставьте
  p.StartInfo.UseShellExecute := false; // запрещаем создавать отдельную консоль
  p.StartInfo.RedirectStandardOutput := true;
  p.Start;
  p.WaitForExit;
  var s := p.StandardOutput.ReadToEnd; // это то, что вывело бы в консоль
end.
2
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 19:47  [ТС] 3
Это исходный код того, что я хочу переписать:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 @echo off
chcp 1251 >NUL
if not exist "%~dp0/bin/x64/factorio.exe" (
   echo Файла /bin/x64/factorio.exe не найден
   echo Скорее всего вы положили этот файл не в ту папку
   set /p=   
   exit
)
chcp 1251 >NUL
echo Factorio.exe найден
 
"%~dp0/bin/x64/factorio.exe" --version > version.txt
set /p fver=<version.txt
set "ffver=%fver:~9,7%"
set /a cver=%fver:~14,2% 
set /a nver=cver+1
set /a nnver=nver+1
 
chcp 1251 >NUL
echo Текущая версия: %ffver%
 
if not exist "core-win64-0.18.%cver%-0.18.%nver%-update.zip" (
   echo Файла обновления core-win64-0.18.%cver%-0.18.%nver%-update.zip не найдено
   echo Положите его в эту папку, чтобы обновить игру до 0.18.%nver%
   set /p=   
)
if not exist "core-win64-0.18.%cver%-0.18.%nver%-update.zip" ( 
   exit
)
echo core-win64-0.18.%cver%-0.18.%nver%-update найден
 
set /p= Нажмите Ввод, чтобы запустить обновление... (0.18.%cver%-0.18.%nver%)
 
"%~dp0/bin/x64/factorio.exe" --apply-update core-win64-0.18.%cver%-0.18.%nver%-update.zip
На выходе мы получаем файл version.txt, со следующим содержимым:
Version: 0.18.17 (build 50462, win64, alpha)
Binary version: 64
Map input version: 0.16.0-0
Map output version: 0.18.17-0

Ваши варианты решения мне не подошли.
0
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 20:41 4
Ну допустим, это хоть сколько то информации. Но вы снова недоговариваете:
Цитата Сообщение от Olil Посмотреть сообщение
Ваши варианты решения мне не подошли.
Как вы представляете дальнейшие идеи, если вы даже не сказали что именно не подходит? И почему "вариантЫ", во множественном числе?

Ну и насчёт .bat - вы опять говорите "сделайте как там", вместо нормального ТЗ. Конечно, с полным .bat файлом, вместо 1 строчки, понять проще. Но картина всё ещё не полная.
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 20:46  [ТС] 5
Я просто пытался ещё через Diagnostic.Process что-нибудь придумать. Игра не запускается если ей задать этот аргумент к слову, а просто выводит значения в текстовой файл.

Добавлено через 1 минуту
Использую "второй" вариант игра зависает при загрузке.
0
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 20:57 6
А я говорю даёшь ТЗ!!

И я всё ещё не вижу "вариантЫ". Если второй это мой последний код - где первый? Вы им называете исходный код Exec что ли?
1
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 21:16  [ТС] 7
Да, я так называю исходный код Exec. Легче уж использовать батник как прослойку.
0
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 21:54 8
Цитата Сообщение от Olil Посмотреть сообщение
Легче уж использовать батник как прослойку.
И таким образом вы дошли до "ладно не надо", так и не объясним мне что делает батник. Браво.
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 21:57  [ТС] 9
Этот батник предназначен для обновления игры с пиратки. Эта конструкция отвечает за вывод версии игры в текстовой документ, в дальнейшем это используется для защиты от дурака.
0
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 22:05 10
Тогда что не так с
Цитата Сообщение от Olil Посмотреть сообщение
Игра не запускается
И вообще, "не запускаться" можно большим кол-во разных способов. Это важная деталь.

Про зависание - попробуйте для начала выполнить "factorio.exe --version" из cmd. Может там ждёт чего то типа нажатия Enter, это легко решается.
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 22:07  [ТС] 11
Она зависает при загрузке.
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 22:11  [ТС] 12
Через командную строку получилось
Миниатюры
Аналог конструкции "%~dp0/bin/x64/factorio.exe" --version > version.txt на pascalABC.net  
0
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 22:25 13
Лучший ответ Сообщение было отмечено Olil как решение

Решение

Вообще должно и без "start" в начале работать...

Ну, в любом случае - что если нажать Enter после этого полученного текста?

Добавлено через 7 минут
А, у меня наконец докачалось, и тут я понял что аргумент (--version) я никуда не засунул.
Вы вообще тоже могли бы посмотреть на программу и увидеть что что то не так, раз --version нигде нет.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
uses System.Diagnostics;
 
begin
  var p := new Process;
  p.StartInfo.FileName := 'C:\Program Files\Factorio\bin\x64\Factorio.exe';
  p.StartInfo.Arguments := '--version';
  p.StartInfo.UseShellExecute := false; // запрещаем создавать отдельную консоль
  p.StartInfo.RedirectStandardOutput := true;
  p.Start;
  p.WaitForExit;
  var s := p.StandardOutput.ReadToEnd; // это то, что вывело бы в консоль
  s.Println;
end.
Сделал пока вывод в окно вывода, чисто чтоб видно было что всё работает.
1
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 32
29.03.2020, 22:30  [ТС] 14
Спасибо, мда, что в консоли занимает одну строку - в паскале десяток)
0
2350 / 1453 / 526
Регистрация: 07.04.2017
Сообщений: 4,782
29.03.2020, 22:57 15
Консоль - это то что есть у многих программ, не путайте её с cmd и .bat .

Ну а короче - потому что короткие программы в скриптах всегда короче. В этом вся суть скриптов.
Зато в скриптах на много сложнее вылавливать ошибки и писать программы на >100 строк. Ну и программы на >100 строк обычно будут длиннее.
0
29.03.2020, 22:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2020, 22:57
Помогаю со студенческими работами здесь

ORA-00201: control file version 11.2.0.2.0 incompatible with ORACLE version 11.2.0.0.0
Пожалуйста отзовитесь монстры оракла))) помогите кто чем может, я взял базу с сервера и собираюсь...

Командная строка Windows никак не откликается на команды java -version, javac -version
jdk установлен, переменные среды настроены (java_home, добавлен путь в path), пк перезагружен...

Как понять This version of ChromeDriver only supports Chrome version 78
Собственно вопрос такой, стоит на убунте 14-й google-chrome --version Google Chrome...

This version of ChromeDriver only supports Chrome version xx
Пишу программу для автоматизации действий на сайте. У меня установлена последняя версия Chrome 85 и...

"Error: This version of PyQt5 and the commercial version of Qt have incompatible licenses" при установке Pyqt
Никак не могу установить pyqt, вылезает такая ошибка Error: This version of PyQt5 and the...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru