Что нового

Неизвестная папка на пути к исполняющему файлу

Dobrodei

Новичок
Сообщения
8
Репутация
0
Доброго времени суток.
Есть путь @ProgramFilesDir & “\1с\*.*.*.*\bin\file.exe”
Папка где звездочки имеет разное название содержащее только цифры, нужная папка всегда имеет максимальные значения (например 8.9.3.4 меньше чем 8.9.4.1) , как указать такую папку?
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Код:
#include <Array.au3>
#include <File.au3>

$aList = _FileListToArray(@ProgramFilesDir & '\1c', '*', 2)
If @error Then Exit MsgBox(4096, "", "Ошибка")

For $i = UBound($aList) -1 To 0 Step -1
   $aSplit = StringSplit($aList[$i], '.', 2)
   If @error OR UBound($aSplit) <> 4 Then
	  _ArrayDelete($aList, $i)
   EndIf
Next

If UBound($aList) > 0 Then MsgBox(4096, '', @ProgramFilesDir & '\1c\' & $aList[UBound($aList)-1] & '\bin\file.exe')
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <File.au3>
#include <Misc.au3>

Local $aFolderList = _FileListToArray(@ProgramFilesDir & "\1c", "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath
If @error Then Exit ConsoleWrite("_FileListToArray @error: " & @error & @CRLF)

For $i = 1 To $aFolderList[0]
	If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i]
Next
$sFilePath = @ProgramFilesDir & "\1c\" & $sCurVer & "\bin\file.exe"
If Not FileExists($sFilePath) Then Exit ConsoleWrite("Not FileExists" & @CRLF)

MsgBox(0, "", $sFilePath)
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
Tempo сказал(а):
Код:
#include <File.au3>
#include <Misc.au3>

Local $aFolderList = _FileListToArray(@ProgramFilesDir & "\1c", "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath (объявление переменной $aFolderList) - [color=red]$FLTA_FOLDERS), $sCurVer, $sFilePath непонятно? [/color]
If @error Then Exit ConsoleWrite("_FileListToArray @error: " & @error & @CRLF) [color=red](если ошибка? то )[/color] тут тоже непонятно

For $i = 1 To $aFolderList[0]
	If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i] (сравнение версий - большая = $aFolderList[$i])
Next
$sFilePath = @ProgramFilesDir & "\1c\" & $sCurVer & "\bin\file.exe"
If Not FileExists($sFilePath) Then Exit ConsoleWrite("Not FileExists" & @CRLF)

MsgBox(0, "", $sFilePath)
Как путь полученный в $sFilePath вставить в другой скрипт?
Спасибо
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Dobrodei [?]
Как путь полученный в $sFilePath вставить в другой скрипт?
Просто вставьте этот код в функцию.
На будущее почитайте в справке про Func и return
Код:
$sFilePath = _sFilePath () ;можно вызвать из тела другой функции или из другого места кода.
Func _sFilePath ()
Local $aFolderList = _FileListToArray(@ProgramFilesDir & "\1c", "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath (объявление переменной $aFolderList) - [color=red]$FLTA_FOLDERS), $sCurVer, $sFilePath непонятно? [/color]
If @error Then Exit ConsoleWrite("_FileListToArray @error: " & @error & @CRLF) [color=red](если ошибка? то )[/color] тут тоже непонятно

For $i = 1 To $aFolderList[0]
    If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i] (сравнение версий - большая = $aFolderList[$i])
Next
$sFilePath = @ProgramFilesDir & "\1c\" & $sCurVer & "\bin\file.exe"
If Not FileExists($sFilePath) Then 
Exit MsgBox(0, "error", 'Not FileExists' )
else
Return $sFilePath
endif
endfunc
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Dobrodei, можете определить функцию с этим кодом и использовать где вам нужно

Пример
Код:
#include <File.au3>
#include <Misc.au3>

Local $sFilePath = _GetFilePath()
If @error Then Exit MsgBox(0, "", "Не удалось получить полный путь")
MsgBox(0, "", $sFilePath)

Func _GetFilePath()
	Local $aFolderList = _FileListToArray(@ProgramFilesDir & "\1c", "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath
	If @error Then Return SetError(@error, 0, 0)
	For $i = 1 To $aFolderList[0]
		If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i]
	Next
	$sFilePath = @ProgramFilesDir & "\1c\" & $sCurVer & "\bin\file.exe"
	If Not FileExists($sFilePath) Then Return SetError(5, 0, 0)
	Return $sFilePath
EndFunc


Или приложите ваш скрипт и укажите где вам нужно получить путь
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
Нужно что-то вроде этого - на выходе получаем имя папки (самое большое цифровое значение)
@echo off
For /F "delims=" %%a IN ('Dir /B C:\PROGRA~1\1cv8') DO (
set result=%%a
)
dir C:\PROGRA~1\1cv8\%result%\
pause

сам скрипт:
Opt(“TrayIconHide”, 1)
Opt(“SendKeyDelay”, 0)
$target = @ProgramFilesDir & “\1cv8\RESULT\bin\chdbfl.exe”
If $cmdline[0] <> 2 Then
MsgBox(0, “Описание параметров запуска”, “Check1CD.exe ИсправлятьОшибки ИмяФайлаБД” & @CRLF & @CRLF & “ИсправлятьОшибки: 0 или 1” & @CRLF & “ИмяФайлаБД: путь к файлу 1Cv8.1CD”)
Exit
EndIf
Run($target)
WinWait(“Проверка физической целостности файла БД”)
Send($cmdline[2], 1)
Send(“{TAB}”)
If $cmdline[1] = “1” Then
Send(“{SPACE}”)
EndIf
Send(“{TAB 2}{ENTER}”)
полученное значение должно быть вместо RESULT
Спасибо)
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <File.au3>
#include <Misc.au3>
Opt("TrayIconHide", 1)
Opt("SendKeyDelay", 0)

Local $sTarget = _GetPath(@ProgramFilesDir & "\1cv8") & "\bin\chdbfl.exe"
If @error Then Exit MsgBox(0, "", "Не удалось получить полный путь")

If $CmdLine[0] <> 2 Then
	MsgBox(0, "Описание параметров запуска", "Check1CD.exe ИсправлятьОшибки ИмяФайлаБД" & @CRLF & @CRLF & _
			"ИсправлятьОшибки: 0 или 1" & @CRLF & "ИмяФайлаБД: путь к файлу 1Cv8.1CD")
	Exit
EndIf
Run($sTarget)
WinWait("Проверка физической целостности файла БД")
Send($CmdLine[2], 1)
Send("{TAB}")
If $CmdLine[1] = "1" Then
	Send("{SPACE}")
EndIf
Send("{TAB 2}{ENTER}")

Func _GetPath($sStartPath)
	Local $aFolderList = _FileListToArray($sStartPath, "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath
	If @error Then Return SetError(@error, 0, 0)
	For $i = 1 To $aFolderList[0]
		If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i]
	Next
	$sFilePath = $sStartPath & "\" & $sCurVer
	If Not FileExists($sFilePath) Then Return SetError(5, 0, 0)
	Return $sFilePath
EndFunc   ;==>_GetPath


Используйте теги
Код AutoIt
autoit.gif

Код (кроме AutoIt)
code.gif
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
Tempo сказал(а):
Код:
#include <File.au3>
#include <Misc.au3>
Opt("TrayIconHide", 1)
Opt("SendKeyDelay", 0)

Local $sTarget = _GetPath(@ProgramFilesDir & "\1cv8") & "\bin\chdbfl.exe"
If @error Then Exit MsgBox(0, "", "Не удалось получить полный путь")

If $CmdLine[0] <> 2 Then
	MsgBox(0, "Описание параметров запуска", "Check1CD.exe ИсправлятьОшибки ИмяФайлаБД" & @CRLF & @CRLF & _
			"ИсправлятьОшибки: 0 или 1" & @CRLF & "ИмяФайлаБД: путь к файлу 1Cv8.1CD")
	Exit
EndIf
Run($sTarget)
WinWait("Проверка физической целостности файла БД")
Send($CmdLine[2], 1)
Send("{TAB}")
If $CmdLine[1] = "1" Then
	Send("{SPACE}")
EndIf
Send("{TAB 2}{ENTER}")

Func _GetPath($sStartPath)
	Local $aFolderList = _FileListToArray($sStartPath, "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath
	If @error Then Return SetError(@error, 0, 0)
	For $i = 1 To $aFolderList[0]
		If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i]
	Next
	$sFilePath = $sStartPath & "\" & $sCurVer
	If Not FileExists($sFilePath) Then Return SetError(5, 0, 0)
	Return $sFilePath
EndFunc   ;==>_GetPath


Используйте теги
Код AutoIt
autoit.gif

Код (кроме AutoIt)
code.gif
Про теги запомню) Скрипт не находит путь "Не удалось получить полный путь" , с чем может быть связано?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Напишите код ошибки
Код:
#include <File.au3>
#include <Misc.au3>
Opt("TrayIconHide", 1)
Opt("SendKeyDelay", 0)

Local $sTarget = _GetPath(@ProgramFilesDir & "\1cv8") & "\bin\chdbfl.exe"
If @error Then Exit MsgBox(0, "Ошибка: " & @error, "Не удалось получить путь")

If $CmdLine[0] <> 2 Then
	MsgBox(0, "Описание параметров запуска", "Check1CD.exe ИсправлятьОшибки ИмяФайлаБД" & @CRLF & @CRLF & _
			"ИсправлятьОшибки: 0 или 1" & @CRLF & "ИмяФайлаБД: путь к файлу 1Cv8.1CD")
	Exit
EndIf
Run($sTarget)
WinWait("Проверка физической целостности файла БД")
Send($CmdLine[2], 1)
Send("{TAB}")
If $CmdLine[1] = "1" Then
	Send("{SPACE}")
EndIf
Send("{TAB 2}{ENTER}")

Func _GetPath($sStartPath)
	Local $aFolderList = _FileListToArray($sStartPath, "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath
	If @error Then Return SetError(@error, 0, 0)
	For $i = 1 To $aFolderList[0]
		If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i]
	Next
	$sFilePath = $sStartPath & "\" & $sCurVer
	If Not FileExists($sFilePath) Then Return SetError(5, 0, 0)
	Return $sFilePath
EndFunc   ;==>_GetPath
 
A

Alofa

Гость
Код:
If MsgBox(4 + 64, Default, 'Вы уверены что начало пути такое: "' & @ProgramFilesDir & '\1с\..."?') = 7 Then Exit

Local $sPath = 'Ни один из файлов или каталогов не соответствует маске поиска'
Local $hSearch = FileFindFirstFile(@ProgramFilesDir & '\1с\?.?.?.?')

If $hSearch <> -1 Then
	While 1
		$sFile = FileFindNextFile($hSearch)
		If @error Then ExitLoop
		$sFile = @ProgramFilesDir & '\1с\' & $sFile & '\bin\file.exe'
		If FileExists($sFile) Then $sPath = $sFile
	WEnd
	FileClose($hSearch)
EndIf
MsgBox(262144, 'Результат:', $sPath) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>


Dobrodei
Учитесь ставить правильные кавычки в коде, а не это “”.

OffTopic:
Раньше, когда на форуме были модераторы, они бы выдали вам вот такое Предупреждение.
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
Tempo сказал(а):
Напишите код ошибки
Код:
#include <File.au3>
#include <Misc.au3>
Opt("TrayIconHide", 1)
Opt("SendKeyDelay", 0)

Local $sTarget = _GetPath(@ProgramFilesDir & "\1cv8") & "\bin\chdbfl.exe"
If @error Then Exit MsgBox(0, "Ошибка: " & @error, "Не удалось получить путь")

If $CmdLine[0] <> 2 Then
	MsgBox(0, "Описание параметров запуска", "Check1CD.exe ИсправлятьОшибки ИмяФайлаБД" & @CRLF & @CRLF & _
			"ИсправлятьОшибки: 0 или 1" & @CRLF & "ИмяФайлаБД: путь к файлу 1Cv8.1CD")
	Exit
EndIf
Run($sTarget)
WinWait("Проверка физической целостности файла БД")
Send($CmdLine[2], 1)
Send("{TAB}")
If $CmdLine[1] = "1" Then
	Send("{SPACE}")
EndIf
Send("{TAB 2}{ENTER}")

Func _GetPath($sStartPath)
	Local $aFolderList = _FileListToArray($sStartPath, "?.?.?.?", $FLTA_FOLDERS), $sCurVer, $sFilePath
	If @error Then Return SetError(@error, 0, 0)
	For $i = 1 To $aFolderList[0]
		If _VersionCompare($sCurVer, $aFolderList[$i]) = -1 Then $sCurVer = $aFolderList[$i]
	Next
	$sFilePath = $sStartPath & "\" & $sCurVer
	If Not FileExists($sFilePath) Then Return SetError(5, 0, 0)
	Return $sFilePath
EndFunc   ;==>_GetPath
Ошибка 1


Добавлено:
Сообщение автоматически объединено:

Alofa сказал(а):
Код:
If MsgBox(4 + 64, Default, 'Вы уверены что начало пути такое: "' & @ProgramFilesDir & '\1с\..."?') = 7 Then Exit

Local $sPath = 'Ни один из файлов или каталогов не соответствует маске поиска'
Local $hSearch = FileFindFirstFile(@ProgramFilesDir & '\1с\?.?.?.?')

If $hSearch <> -1 Then
	While 1
		$sFile = FileFindNextFile($hSearch)
		If @error Then ExitLoop
		$sFile = @ProgramFilesDir & '\1с\' & $sFile & '\bin\file.exe'
		If FileExists($sFile) Then $sPath = $sFile
	WEnd
	FileClose($hSearch)
EndIf
MsgBox(262144, 'Результат:', $sPath) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>


Dobrodei
Учитесь ставить правильные кавычки в коде, а не это “”.

OffTopic:
Раньше, когда на форуме были модераторы, они бы выдали вам вот такое Предупреждение.
Ни один из файлов или каталогов не соответствует маске поиска :(
На всякий случай путь: C:\Program Files\1cv8\8.2.3.2170\bin\chdbfl.exe (8.2.3.2170 не константа)
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Dobrodei, разрядность ОС? Проверьте существует ли изначальный путь

Код:
MsgBox(0, @OSArch, @ProgramFilesDir & "\1cv8" & @CRLF & "Путь " & (FileExists(@ProgramFilesDir & "\1cv8") ? "существует" : "не существует"))
 
A

Alofa

Гость
Dobrodei сказал(а):
... (например 8.9.3.4 меньше чем 8.9.4.1)...
Dobrodei сказал(а):
... На всякий случай путь: C:\Program Files\1cv8\8.2.3.2170\bin\chdbfl.exe (8.2.3.2170 не константа)
:shok: :blink: :stars:

Код:
Local $sPath = 'Ни один из файлов или каталогов не соответствует маске поиска'
Local $sPathStart = EnvGet('SystemDrive') & '\Program Files\1с\'
Local $hSearch = FileFindFirstFile($sPathStart & '?.?.?.*')
If $hSearch <> -1 Then
	While 1
		$sFile = FileFindNextFile($hSearch)
		If @error Then ExitLoop
		$sFile = $sPathStart & $sFile & '\bin\file.exe'
		If FileExists($sFile) Then $sPath = $sFile
	WEnd
	FileClose($hSearch)
EndIf
MsgBox(262144, 'Результат:', $sPath) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
Tempo сказал(а):
Dobrodei, разрядность ОС? Проверьте существует ли изначальный путь

Код:
MsgBox(0, @OSArch, @ProgramFilesDir & "\1cv8" & @CRLF & "Путь " & (FileExists(@ProgramFilesDir & "\1cv8") ? "существует" : "не существует"))
Была ошибка в разрядности , предыдущие скрипты по прежнему не работают.
"Путь существует"


Добавлено:
Сообщение автоматически объединено:

Alofa сказал(а):
Dobrodei сказал(а):
... (например 8.9.3.4 меньше чем 8.9.4.1)...
Dobrodei сказал(а):
... На всякий случай путь: C:\Program Files\1cv8\8.2.3.2170\bin\chdbfl.exe (8.2.3.2170 не константа)
:shok: :blink: :stars:

Код:
Local $sPath = 'Ни один из файлов или каталогов не соответствует маске поиска'
Local $sPathStart = EnvGet('SystemDrive') & '\Program Files\1с\'
Local $hSearch = FileFindFirstFile($sPathStart & '?.?.?.*')
If $hSearch <> -1 Then
	While 1
		$sFile = FileFindNextFile($hSearch)
		If @error Then ExitLoop
		$sFile = $sPathStart & $sFile & '\bin\file.exe'
		If FileExists($sFile) Then $sPath = $sFile
	WEnd
	FileClose($hSearch)
EndIf
MsgBox(262144, 'Результат:', $sPath) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
'Ни один из файлов или каталогов не соответствует маске поиска'
Кстати , проблема именно в поиске папки , если в первом скрипте меняем ?.?.?.? на нужную папку , скрипт работает.
 
A

Alofa

Гость
Dobrodei сказал(а):
... 'Ни один из файлов или каталогов не соответствует маске поиска'...
Вы проверьте какой путь вам нужен и какой путь прописан в моем скрипте. В первом посте у вас в пути присутствует папка "1c", а в другом уже "1cv8", вы уж определитесь.
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
Alofa сказал(а):
Dobrodei сказал(а):
... 'Ни один из файлов или каталогов не соответствует маске поиска'...
Вы проверьте какой путь вам нужен и какой путь прописан в моем скрипте. В первом посте у вас в пути присутствует папка "1c", а в другом уже "1cv8", вы уж определитесь.
Путь я сверяю перед компилированием, там проблема с алгоритмом поиска.


Добавлено:
Сообщение автоматически объединено:

скрипт Гюнтера работает, как встроить его? :scratch:
Код:
#include <Array.au3>
#include <File.au3>

$aList = _FileListToArray(@ProgramFilesDir & '\1cv8', '*', 2)
If @error Then Exit MsgBox(4096, "", "Ошибка")

For $i = UBound($aList) -1 To 0 Step -1
   $aSplit = StringSplit($aList[$i], '.', 2)
   If @error OR UBound($aSplit) <> 4 Then
      _ArrayDelete($aList, $i)
   EndIf
Next

If UBound($aList) > 0 Then MsgBox(4096, '', @ProgramFilesDir & '\1cv8\' & $aList[UBound($aList)-1] & '\bin\chdbfl.exe')
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Код:
#include <Array.au3>
#include <File.au3>

$sPath = _GetPath()

Func _GetPath()
   Local $aList = _FileListToArray(@ProgramFilesDir & '\1c', '*', 2)
   If @error Then Return SetError(2, 0, 0)

   For $i = UBound($aList) -1 To 0 Step -1
      Local $aSplit = StringSplit($aList[$i], '.', 2)
      If @error OR UBound($aSplit) <> 4 Then
         _ArrayDelete($aList, $i)
      EndIf
   Next

   If UBound($aList) = 0 Then Return SetError(1, 0, 0)
   Return @ProgramFilesDir & '\1c\' & $aList[UBound($aList)-1] & '\bin\file.exe'
EndFunc
 
Автор
D

Dobrodei

Новичок
Сообщения
8
Репутация
0
gunter123 сказал(а):
Код:
#include <Array.au3>
#include <File.au3>

$sPath = _GetPath()

Func _GetPath()
   Local $aList = _FileListToArray(@ProgramFilesDir & '\1c', '*', 2)
   If @error Then Return SetError(2, 0, 0)

   For $i = UBound($aList) -1 To 0 Step -1
      Local $aSplit = StringSplit($aList[$i], '.', 2)
      If @error OR UBound($aSplit) <> 4 Then
         _ArrayDelete($aList, $i)
      EndIf
   Next

   If UBound($aList) = 0 Then Return SetError(1, 0, 0)
   Return @ProgramFilesDir & '\1c\' & $aList[UBound($aList)-1] & '\bin\file.exe'
EndFunc
Не могу понять , что делает "Return" и как вставить его параметры в нужный скрипт :(
 
Верх