Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Создание и открытие только что созданного файла (http://forum.oszone.net/showthread.php?t=139135)

Bars66 02-05-2009 10:52 1109019

Создание и открытие только что созданного файла
 
Создаю скриптик с помощью которого выбирается файл который открывается определёной програмой пример: выбираю файл k790I.fbn он открывается програмой и получается файл k790I.raw как раз таки до этого момента все хорошо а потом надо только что созданый k790i.raw открыть второй програмой. всё хорошо да только имя файла может быть любое.
вот наколякал такой скрипт
Код:


$message = "Выберите файл FS."

$var = FileOpenDialog($message, @WindowsDir & "", "Прошивки FS (*.fbn;)", 1)
If @error Then
    MsgBox(4096,"","No File(s) chosen")
Else
    $var = StringReplace($var, "|", @CRLF)
    $var1 = run("babe2raw.exe " & $var)
        sleep ( 500)
        ProcessClose("babe2raw.exe")

$PID = ProcessExists("babe2raw.exe") ; Will return the PID or 0 if the process isn't found.
If $PID Then ProcessClose($PID)
        run ( "SEFStool4.exe"& $var1)
       


 
EndIf

вот этот отрезок кода выполняется хорошо (создаётся raw файл)

Код:

$message = "Выберите файл FS."

$var = FileOpenDialog($message, @WindowsDir & "", "Прошивки FS (*.fbn;)", 1)
If @error Then
    MsgBox(4096,"","No File(s) chosen")
Else
    $var = StringReplace($var, "|", @CRLF)
    $var1 = run("babe2raw.exe " & $var)
        sleep ( 500)
        ProcessClose("babe2raw.exe")

$PID = ProcessExists("babe2raw.exe") ; Will return the PID or 0 if the process isn't found.
If $PID Then ProcessClose($PID)

а вот этот отрезок не исполняется
Код:

run ( "SEFStool4.exe"& $var1)
       


 
EndIf

т.е не открывается программа и вообще ничего неделается
вот что пишет аутоит
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\FS\1.au3"
>Exit code: 0 Time: 8.546

Creat0R 02-05-2009 11:36 1109038

Цитата:

Цитата Bars66
вот этот отрезок не исполняется »

А зачем там $var1? это PID процесса, и получается что имя запускаемого файла примерно такое: SEFStool4.exe5432

Bars66 02-05-2009 15:36 1109152

надо так чтоб было имя запускаемого файла SEFStool4.exe ***.raw
притом ****.raw это то что было получено с помощью программы babe2raw.exe из файла ***.fbn
проблема в том что название файла может быть СОВЕРШЕННО любым

Creat0R 02-05-2009 20:42 1109282

Цитата:

Цитата Bars66
ритом ****.raw это то что было получено с помощью программы babe2raw.exe »

См. справку по команде Run(). Она возвращает идентификатор процесса, а не то что вернула запускаемая программа.

Bars66 03-05-2009 11:07 1109529

а какую команду надо применять можно отвечать без загодок и намеков

Creat0R 03-05-2009 11:21 1109537

Цитата:

Цитата Bars66
надо только что созданый k790i.raw открыть второй програмой. всё хорошо да только имя файла может быть любое. »

Что значит любое, это имя гинерирует запускаемая программа, или это то-же имя что выбрано в FileOpenDialog но с расширением «.raw»? Если первое то можно попробовать искать файл с FileFindFirstFile/FileFindNextFile, а если второе то всё просто - в переменной $var заменяем расширение на raw:

Код:

$message = "Выберите файл FS."

$var = FileOpenDialog($message, @WindowsDir & "", "Прошивки FS (*.fbn;)", 1)

If @error Then
    MsgBox(4096, "", "No File(s) chosen")
Else
    $var = StringReplace($var, "|", @CRLF)
    Run("babe2raw.exe " & $var) ;тут для надёжности можно было бы использовать RunWait().
    Sleep(500)

    ProcessClose("babe2raw.exe")
    $PID = ProcessExists("babe2raw.exe") ; Will return the PID or 0 if the process isn't found.
    If $PID Then ProcessClose($PID)

    $var = StringTrimRight($var, 3) & "raw"
    Run("SEFStool4.exe " & $var)
EndIf


Bars66 03-05-2009 11:58 1109550

ОК все заработало ждите вопросов как запихнут это все в GUI.

Bars66 04-05-2009 17:34 1110563

Надо накалякать еще один скрипт чтобы исполнялся вот эта команда
SEFSTool.exe xxx.fbn C:\FS (где xxx - это имя файла прошивки)

Код:


$message = "Выберите файл FS."

$var = FileOpenDialog($message,  "c:/fs", "Прошивки FS (*.fbn;)", 1)
DirCreate("C:\FS\")
If @error Then
    MsgBox(4096, "", "Файлов не выбрано")
Else
    $var = StringReplace($var, "|", @CRLF)
    Run("C:\FS\fbn2fs\sefstool.exe" & $var & "C:\FS")
       
 
    Sleep(10000)

    ProcessClose("SEFSTool")
    $PID = ProcessExists("SEFSTool") ; Will return the PID or 0 if the process isn't found.
    If $PID Then ProcessClose($PID)

       
EndIf

но почемуто он ничего неделает. (помните имя файла прошивки может быть все время разное!

Elbek 04-05-2009 18:47 1110615

Пробежался по скрипту, и думаю что ошибка в строках:
1.DirCreate("C:\FS\") - Зачем создавать эту директорию, если как я понял по скрипту она уже существует. и если dircreate стоит после fileopendialog при не выбранном файле сообщения об ошибке не будет.
2.Run("C:\FS\fbn2fs\sefstool.exe" & $var & "C:\FS"). - здесь запускается строка run с filename -ом C:\FS\fbn2fs\sefstool.exeС:\dir\xxx.fbnC:\FS

и еще не понятно зачем нужна строка $var = StringReplace($var, "|", @CRLF)
StringReplace не найдет в любом случае символ "|" в $var.

Elbek 06-05-2009 02:31 1111747

[QUOTE
Цитата:

Цитата Bars66
Надо накалякать еще один скрипт чтобы исполнялся вот эта команда
SEFSTool.exe xxx.fbn C:\FS (где xxx - это имя файла прошивки) »

исполнятся команда SEFSTool.exe xxx.fbn C:\FS\fbn2fs\ работает только если скрипт лежит в папке C:\FS\fbn2fs\

Код:

$message = "Выберите файл FS."

$var = FileOpenDialog($message,  "c:/fs", "Прошивки FS (*.fbn;)", 1)

If @error Then
    MsgBox(4096, "", "Файлов не выбрано")
Else
    $filename = StringRegExp($var, '(?i).*\\(.*\..*)',1) ;дергает с полного пути только само название файла
    FileCopy($var,  "C:\FS\fbn2fs\" & $filename[0])
    Run("sefstool.exe" & $filename[0] & "C:\FS\fbn2fs") ; исполняется вот эта команда SEFSTool.exe xxx.fbn C:\FS\fbn2fs,
       
 
    Sleep(10000)

    ProcessClose("SEFSTool")
    $PID = ProcessExists("SEFSTool") ; Will return the PID or 0 if the process isn't found.
    If $PID Then ProcessClose($PID)

       
EndIf


Bars66 09-05-2009 16:19 1114408

Неработает
Цитата:

Цитата Elbek
[QUOTE
Цитата Bars66:
Надо накалякать еще один скрипт чтобы исполнялся вот эта команда
SEFSTool.exe xxx.fbn C:\FS (где xxx - это имя файла прошивки) »
исполнятся команда SEFSTool.exe xxx.fbn C:\FS\fbn2fs\ работает только если скрипт лежит в папке C:\FS\fbn2fs\
Код:
$message = "Выберите файл FS."
$var = FileOpenDialog($message, "c:/fs", "Прошивки FS (*.fbn;)", 1)
If @error Then
MsgBox(4096, "", "Файлов не выбрано")
Else
$filename = StringRegExp($var, '(?i).*\\(.*\..*)',1) ;дергает с полного пути только само название файла
FileCopy($var, "C:\FS\fbn2fs\" & $filename[0])
Run("sefstool.exe" & $filename[0] & "C:\FS\fbn2fs") ; исполняется вот эта команда SEFSTool.exe xxx.fbn C:\FS\fbn2fs,
Sleep(10000)
ProcessClose("SEFSTool")
$PID = ProcessExists("SEFSTool") ; Will return the PID or 0 if the process isn't found.
If $PID Then ProcessClose($PID)
EndIf »

Неработает Файл вообще не запускается
вот что написано в инструкции
Далее открываем командную строку (пуск > выполнить > наберите cmd > нажмите Enter) и набираем в командной строке CD\FS, жмем Enter.
После этого набираем команду:
SEFSTool.exe xxx.fbn C:\FS (где xxx - это имя файла прошивки). Жмём Enter.
send() не предлагать

Elbek 10-05-2009 18:24 1115007

Цитата:

Цитата Bars66
Далее открываем командную строку (пуск > выполнить > наберите cmd > нажмите Enter) и набираем в командной строке CD\FS, жмем Enter.
После этого набираем команду:
SEFSTool.exe xxx.fbn C:\FS (где xxx - это имя файла прошивки). Жмём Enter. »

Код:

$message = "Выберите файл FS."
$var = FileOpenDialog($message, "c:/fs", "Прошивки FS (*.fbn;)", 1) ; окно выбора файла
$filename = StringRegExp($var, '(?i).*\\(.*\..*)',1); дергает имя файла
Run("sefstool.exe" & " " &  $filename[0] & " " & "C:\FS\", "c:\fs") ; переходит в c:\fs\, и запускает SEFSTool.exe xxx.fbn C:\FS



Время: 13:10.

Время: 13:10.
© OSzone.net 2001-