Что нового

[Файловая система] Перемещение по папкам на уровень вверх

Alkantel

Новичок
Сообщения
45
Репутация
1
Добрый вечер! Собственно сабж: есть папка "А" в которой находятся папки "В" и "С". Нужно скриптом, который находится в папке "В", запустить приложение из папки "С". Есть какой-то способ выбраться из корневой папки на уровень вверх? Если да, то прошу подсказать как, если нет, то можно закрыть и/или удалить тему. Заранее благодарен.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Alkantel
"С:\текущ.путь\..\С\" - здесь ".." поднятие на уровень вверх. Можно ещё _PathFull использовать.
 
Автор
Alkantel

Alkantel

Новичок
Сообщения
45
Репутация
1
AZJIO, извиняюсь, забыл добавить: полный путь я не знаю, так как программа будет запускаться со сьемного носителя, соответственно буква диска будет всегда разной.
 

StarEdik

Новичок
Сообщения
365
Репутация
4
Alkantel
есть папка "А" в которой находятся папки "В" и "С". Нужно скриптом, который находится в папке "В", запустить приложение из папки "С".
Этот файл сохраните в папке "В"
Код:
$File_name= "Ccc.exe"; Имя файла который в папке "С"
$sPath = @ScriptDir ; каталог файла
$sParentPath = StringRegExpReplace($sPath ,'\\[^\\]*$',''); родительский каталог
$FileSearch =_SearchTreeForFile($sParentPath , $File_name);Находим файл с помощью функции  _SearchTreeForFile()
Run($FileSearch ); Эапускаем файл

Func _SearchTreeForFile($sRootPath, $sFileName);
    If StringRight($sRootPath, 1) <> '\' Then $sRootPath &= '\'
    Local $sOutputPathBuffer = ''
    Local $aRet = DllCall("imagehlp.dll", 'long', 'SearchTreeForFile', 'str', _
            $sRootPath, 'str', $sFileName, 'str', $sOutputPathBuffer)
    If $aRet[0] = 1 Then
        Return $aRet[3]
    Else
        Return 0
    EndIf
EndFunc


Alkantel
Есть какой-то способ выбраться из корневой папки на уровень вверх?
Код:
$sPath = @ScriptDir
$sParentPath = StringRegExpReplace($sPath, '\\[^\\]*$', '')
MsgBox(64,"инфо: ",$sPath & @CRLF & @CRLF & $sParentPath & @CRLF )
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Alkantel [?]
есть папка "А" в которой находятся папки "В" и "С". Нужно скриптом, который находится в папке "В", запустить приложение из папки "С"

Код:
$B = @ScriptDir
$A = StringRegExpReplace( $B, '\\([^\\]+)$', '' )
If Not @Extended Then
	MsgBox( 16, "", "Ошибка" )
Else
	$C = $A & "C\"
	Run( $C & "executable.exe" )
EndIf
 

StarEdik

Новичок
Сообщения
365
Репутация
4
Как вариант.
Переместите папку "В" во внутр папки "С".
Из папки "В" запустите программу которая находиться в папке "С".
Вот пример скрипта
Код:
$File= "Ccc.exe" ; Имя файла который в папке "С"
Run('..\'&$File)
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
StarEdik
Конструкция вида '..\' не сработает если изменен текущий каталог для программы. Например, после вызова FileOpenDialog(). Нужно предварительно изменить текущий каталог с помощью 'FileChangeDir(@ScriptDir)'.

Alkantel
Как вариант с помощью регулярных выражений:
Код:
$current_dir = 'C:\Folder1\Folder2\Folder3\Folder4'

$dir = StringRegExp($current_dir, '^(.+)(?:\\[^\\]+){1}|[^\\]+', 1)
MsgBox(0,'На одну папку вверх',$dir[0])

$dir = StringRegExp($current_dir, '^(.+)(?:\\[^\\]+){2}|[^\\]+', 1)
MsgBox(0,'На две папки вверх',$dir[0])

; ...

$dir = StringRegExp($current_dir, '^(.+)(?:\\[^\\]+){255}|[^\\]+', 1)
MsgBox(0,'В корень',$dir[0])
 
Автор
Alkantel

Alkantel

Новичок
Сообщения
45
Репутация
1
Всем спасибо за помощь. Извините, раньше ответить не мог.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Alkantel,
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх