Что нового

Проверить при запуске скрипта папки и файлы

bigarN

Новичок
Сообщения
50
Репутация
0
Версия AutoIt: 3.3.6.1
Описание:
Здравствуйте. Помогите, решит задачу.
Имеется скрипт Referat.ехе . Нужен функция .Он при первом запуске должен проверит:
Находиться ли скрипт в папке «Рефераты».
Если нет – то скрипт должен создать папку «Рефераты» с вложенным папкой «Курсовые» с вложенным файлом «Резуме.doc» и переместить себя в папку «Рефераты».
Если да - то проверить есть ли в этой папке папка «Курсовые»
Если нет - то создать папку «Курсовые» с вложенным файлом «Резуме.doc»
Если да – то проверить есть ли в папке «Курсовые» файл «Резуме.doc»
Если нет - то создать в папке «Курсовые» файл «Резуме.doc»
Если да – то выйти из функции и … :wacko:
Примечания:
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Попробуй-те так:
Код:
_Proverka()

Func _Proverka()
    $WorkDir = StringSplit(@WorkingDir, '\')
    If $WorkDir[$WorkDir[0]] = 'Рефераты' Then
        If FileExists(@ScriptDir & '\Курсовые\') Then
            If Not FileExists(@ScriptDir & '\Курсовые\Резуме.doc') Then FileWrite(@ScriptDir & '\Курсовые\Резуме.doc', '')
        Else
            DirCreate(@ScriptDir & '\Курсовые\')
            FileWrite(@ScriptDir & '\Курсовые\Резуме.doc', '')
        EndIf
    Else
        DirCreate(@ScriptDir & '\Рефераты\Курсовые\')
        FileWrite(@ScriptDir & '\Рефераты\Курсовые\Резуме.doc', '')
        FileCopy(@ScriptFullPath, @ScriptDir & '\Рефераты\')
        Run(@ComSpec & ' /C move /y ' & FileGetShortName(@ScriptFullPath) & ' ' & FileGetShortName(@ScriptDir & '\Рефераты\'), @ScriptDir, @SW_HIDE)
    EndIf
EndFunc
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
Zaramot
:shok:Изумительно.Спасибо Уважаемый Гуру.
А на счет удаления себя после перемещении….плз. :-[
То есть, при первом запуске когда он создает папку и перемешается туда, запушенная основная прога остается. :whistle: Вот его и надо удалят. :scratch:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bigarN,
Мой вариант.
Код:
#include <Word.au3>

Global $__Restart = False

#OnAutoItStartRegister "OnAutoItStart"

_CheckScriptDir('Рефераты', 'Курсовые', 'Резуме.doc')
If @error Then
	MsgBox(16, 'Error', @error)
Else
	MsgBox(64, 'Info', 'OK')
EndIf

Func _CheckScriptDir($s_Dir, $s_SubDir, $s_FileWord_SubDir)
	Local $o_WordApp
	If Not StringRegExp(@ScriptDir, '\\' & $s_Dir & '$') Then
		If Not DirCreate(@ScriptDir & '\' & $s_Dir) Then Return SetError(1)
		FileMove(@ScriptFullPath, @ScriptDir & '\' & $s_Dir & '\' & @ScriptName)
		_ScriptRestart(1, @ScriptDir & '\' & $s_Dir, @ScriptName)
		If @error Then Return SetError(2)
	EndIf
	If Not FileExists(@ScriptDir & '\' & $s_SubDir) Or _
			Not StringInStr(FileGetAttrib(@ScriptDir & '\' & $s_SubDir), 'D') Then
		If Not DirCreate(@ScriptDir & '\' & $s_SubDir) Then Return SetError(2)
	EndIf
	If Not FileExists(@ScriptDir & '\' & $s_SubDir & '\' & $s_FileWord_SubDir) Then
		$o_WordApp = _WordCreate(@ScriptDir & '\' & $s_SubDir & '\' & $s_FileWord_SubDir, 0, 0)
		If @error Then Return SetError(3)
		_WordQuit($o_WordApp, -1)
	EndIf
	Return
EndFunc   ;==>_CheckScriptDir

Func _ScriptRestart($fExit, $sDir, $sFile)
	;Yashied, http://autoit-script.ru/index.php/topic,417.0.html
	Local $Pid
	If Not $__Restart Then
		If @Compiled Then
			$Pid = Run($sDir & '\' & $sFile & ' ' & $CmdLineRaw, $sDir, Default, 1)
		Else
			$Pid = Run(@AutoItExe & ' "' & $sDir & '\' & $sFile & '" ' & $CmdLineRaw, $sDir, Default, 1)
		EndIf
		If @error Then
			Return SetError(@error, 0, 0)
		EndIf
		StdinWrite($Pid, @AutoItPID)
	EndIf
	$__Restart = 1
	If $fExit Then
		Sleep(50)
		Exit
	EndIf
	Return 1
EndFunc   ;==>_ScriptRestart

Func OnAutoItStart()
	Sleep(50)
	Local $Pid = ConsoleRead(1)
	If @extended Then
		While ProcessExists($Pid)
			Sleep(100)
		WEnd
	EndIf
EndFunc   ;==>OnAutoItStart


Раз Вашу тему сюда перенесли, то оформите ее, пожалуйста, в соответствии с Правилами обязательного оформления тем.
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
Zaramot
Отлично. :smile: :shok:
И если еще добавить строку запуска перемешенного файла после удаления основного файла … :whistle: :-\ :-[
madmasles
Спасибо за вариант .Здесь как раз самозапуск имеется но получил ошибку Error(3) :( :-[ :wacko:

А как из полной пути к файлу получить сокращенный путь :scratch: :-\
Наример из
C:\Documents and Settings\All Users\Application Data\Microsoft\OFFICE\DATA\OPA11.BAK
получить
C:\ …\DATA

C:\ …\DATA\OPA11.BAK

C:\ ... \OPA11.BAK
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
Zaramot
Премного благодарен :smile:
Я получил вот это
C:\DOCUME~1\ALLUSE~1\APPLIC~1\MICROS~1\OFFICE\DATA\OPA11.BAK
Но мне нужно точно так (очень коротко)-
диск и конечную папку
диск , конечную папку, файл,
диск и файл
C:\ …\DATA
C:\ …\DATA\OPA11.BAK
C:\ ... \OPA11.BAK

madmasles
Microsoft Office Word 2003
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bigarN [?]
У меня без ошибок с ним работает (Windows XP).
Код:
$sPath = 'C:\Documents and Settings\All Users\Application Data\Microsoft\OFFICE\DATA\OPA11.BAK'
$sDelim = '\...\'
$aPath = StringSplit($sPath, '\')

ConsoleWrite($aPath[1] & $sDelim & $aPath[$aPath[0]] & @LF)
ConsoleWrite($aPath[1] & $sDelim & $aPath[$aPath[0] - 1] & '\' & $aPath[$aPath[0]] & @LF)
ConsoleWrite($aPath[1] & $sDelim & $aPath[$aPath[0] - 1] & @LF)
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
madmasles
:smile: :-[
Спасибо .То что надо.
 
Верх