Что нового

Почему не удаляется файл [FileDelete]?

BlagoYar

Русь Великая, Очнись! Поднимись с колен Родная!
Сообщения
99
Репутация
-1
Вручную удаляется, скриптом никак не хочет.
Пробовал и абсолютный путь и относительно скрипта и через .\ и ещё по-всякому с переменными ...

ПС. Понятно, что @error выдаёт 0
Код:
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\..\..\..\..\..\Медиа\Изображения\Misc\My Token Mix\ICO\Edge Backup.ico
#AutoIt3Wrapper_Outfile_x64=E:\Apps\Edge\Edge Backup.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Резервная копия профиля Edge
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <FileOperations.au3>
#include <Sound.au3>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

$ProgramFilesX64 = RegRead("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")

If NOT FileExists ($ProgramFilesX64 & "\WinRAR") Then
    MsgBox(4096, "Проверка", "WinRAR не установлен")
    Exit
EndIf

$sEdgeLocal = @UserProfileDir & '\AppData\Local\Microsoft\Edge\User Data\'
$sEdgeBackupDir = 'E:\Apps\Edge\'
$sFileName = 'Edge Default Profile'; & ' (' & @HOUR & '_' & @MIN & '_' & @SEC & ') (' & @MDAY & '-' & @MON & '-' & @YEAR & ')'
$sSound = $sEdgeBackupDir & 'BackUpOk.wav'

FileInstall('E:\Apps\Edge\BackUpOk.wav', @ScriptDir & '\BackUpOk.wav', 1)
FileSetAttrib($sSound, '+H-SA')
DirCreate($sEdgeBackupDir & 'BackUps\' & $sFileName)
FileSetAttrib($sEdgeBackupDir & 'BackUps\' & $sFileName, "S")
FileSetAttrib($sEdgeBackupDir & 'BackUps\' & $sFileName, "H")
FileSetAttrib($sEdgeBackupDir & 'BackUps\' & $sFileName, "T")
DirCopy($sEdgeLocal & '\Default\', $sEdgeBackupDir & 'BackUps\' & $sFileName & '\Default\', 0)

ShellExecute($ProgramFilesX64 & '\WinRar\WinRar.exe', 'm -afrar -ibck -r -m5 -ri7:3 -ep1 -scu -s -ma5 -md256m -qo+ -w' & @TempDir & '\WinRaR "' & $sEdgeBackupDir & 'BackUps\' & $sFileName & '" "' & $sEdgeBackupDir & 'BackUps\' & $sFileName & '\*.*"')
ProcessWaitClose('WinRaR.exe')
$CountCopies = _FO_FileBackUp($sEdgeBackupDir & 'BackUps\' & $sFileName & '.rar', $sEdgeBackupDir & '\BackUps\', 2, -1)
;~ MsgBox(0, '', 'Success = ' & $CountCopies & @CRLF & '@error = ' & @error)
DirRemove($sEdgeBackupDir & 'BackUps\' & $sFileName, 1)
FileDelete($sEdgeBackupDir & 'BackUps\' & $sFileName & '.rar')

_SoundOpen($sSound)
Sleep(1500)
_SoundPlay($sSound)
Sleep(1000)
_SoundClose($sSound)

FileDelete($sSound)
RunWait(@ComSpec &' /c Del /f /s /q /a "' & $sSound & '"', '', 0)

Exit
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Правильно так
Код:
$aSndID = _SoundOpen($sSound)
Sleep(1500)
_SoundPlay($aSndID)
Sleep(1000)
_SoundClose($aSndID)

или так
Код:
_SoundPlay($sSound, 1)

или так
Код:
SoundPlay($sSound, 1)
 
Автор
BlagoYar

BlagoYar

Русь Великая, Очнись! Поднимись с колен Родная!
Сообщения
99
Репутация
-1
Правильно так
Код:
$aSndID = _SoundOpen($sSound)
Sleep(1500)
_SoundPlay($aSndID)
Sleep(1000)
_SoundClose($aSndID)
Так работает, спасибо

А так не
Код:
($_sSound, 1)


ПС. А можно ли отключить звук уведомления от WinRAR в скрипте по завершению операции средствами AutoIt?
 
Последнее редактирование:
Автор
BlagoYar

BlagoYar

Русь Великая, Очнись! Поднимись с колен Родная!
Сообщения
99
Репутация
-1
ключ командной строки запуска WinRAR -isnd- ; см. также оф/справку WinRAR
Да справку ж смотрел, потому что сам строку составлял для скрипта, просто не ожидал, что есть такой ключ. А всю ж не пересмотришь.
Спасибо.
 

FENI-X

Новичок
Сообщения
2
Репутация
0
Здравствуйте. Помогите пожалуйста решить проблему записи чтения удаления файлов используя путь и имя из переменной
Код:
#RequireAdmin
;Выполняем скрипт с правами админа т.к. win11 может иметь конфликты прав и доступа. пока не разобрался нужны ли нам эти права

; Название процесса. Что бы получить путь т.к. он может отличаться
$process = "test.exe"

; Ожидание запуска процесса
; Проверка, запущен ли процесс
While Not ProcessExists($process)
    ToolTip("test.exe не запущен", 0, 0)
    Sleep(1000) ; Ждем 1 секунду перед повторной проверкой
WEnd

; Убираем ToolTip, когда процесс запущен
ToolTip("")

; Получение объекта WMI
$obj = ObjGet("WinMgmts:\\.\root\cimv2")

; Выполнение запроса WMI для получения пути к процессу
$que = $obj.ExecQuery('SELECT * FROM Win32_Process WHERE Caption="' & $process & '"')

; Переменная для хранения нашей папки где откуда запущен test.exe
$res = ""

; Перебор результатов запроса
For $o In $que
    $res &= $o.ExecutablePath & @CRLF
Next

; Вывод результата для проверки test.exe что он там показывает
MsgBox(0, "", $res)

; Удаление части пути и добавление новой что бы получить путь где хранятся данные нужного для нас файла console.log
If StringInStr($res, "bin\win64") Then
    $res1 = StringReplace($res, "bin\win64\test.exe", "log\console.log")
EndIf
; Запись результата в буфер обмена
;ClipPut($res1)

; Вывод нового пути например D:\Steam\steamapps\common\test\game\log\console.log
MsgBox(0, "Новый путь", $res1)

; Проверка существования файла console.log
If FileExists(StringStripWS($res1, 3)) Then
    MsgBox(0, "Результат", "Файл существует")
Else
    MsgBox(0, "Результат", "Файл не найден - выполните действие что бы создать console.log")
EndIf

; Чтение файла console.log и поиск строки
Local $file = FileOpen(StringStripWS($res1, 3), 0)
If $file = -1 Then
    MsgBox(0, "Ошибка", "Не удалось открыть файл: " & $res1)
    Exit
EndIf

;Объявляем переменную для поиска строки с пощью регулярного выражения 12/02 01:58:41 pos1 -367.000000 -808.000000 143.944260;pos2 0.000000 -177.000046 0.000000
;и обрезаем лишний(дату, время) текст в строке
Local $line, $cooXYZ = ""
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringRegExp($line, '^\d{2}/\d{2} \d{2}:\d{2}:\d{2} pos1 -?\d+\.\d+ -?\d+\.\d+ -?\d+\.\d+;pos2 -?\d+\.\d+ -?\d+\.\d+ -?\d+\.\d+$') Then
        $cooXYZ = StringRegExpReplace($line, '^\d{2}/\d{2} \d{2}:\d{2}:\d{2} ', '')
        ExitLoop
    EndIf
WEnd
FileClose($file)

; Вывод результата поиска и обрезки строки
If $cooXYZ <> "" Then
    MsgBox(0, "Координаты", $cooXYZ)
Else
    MsgBox(0, "Результат", "Строка с координатами не найдена")
EndIf

; Запись результата в буфер обмена
;ClipPut($cooXYZ)

; Создание нового пути для создания файла testfilie.txt по нужному пути из переменной процесса 
Local $filePath = StringReplace($res, "bin\win64\test.exe", "test\cfg\testfile.txt")

MsgBox(0, "Проверяем наш путь testfilie.txt", $filePath )

; Проверка существования директории и создание её, если она отсутствует
Local $dir = StringLeft($filePath, StringInStr($filePath, "\", 0, -1) - 1)
If Not FileExists($dir) Then
    DirCreate($dir)
EndIf


; ВСЕ А ДАЛЬШЕ НЕ РАБОТАЕТ
; ЕСЛИ УКАЗЫВАЮ ПРОСТОЙ ПУТЬ БЕЗ ПЕРЕМЕННОЙ ТО РАБАТАЕТ ЕСЛИ ИЗ ПЕРЕМЕННОЙ ОШИБКА ОШИБКА
; НЕ УДАЕТСЯ НИ УДАЛИТЬ НИ ЗАПИСАТЬ ФАЙЛ НЕ ПОЛУЧАЕТСЯ ДЛЯ ТЕСТА СОЗДОВАЛ ФАЛЫ В РУЧНУЮ. НИЧЕГО

; Запись строки текста в файл testfilie.txt по пути $filePath
Local $file = FileOpen(StringInStr($filePath), 2)
If $file = -1 Then
    MsgBox(0, "Ошибка", "Не удалось создать файл: " & $filePath & @CRLF & "Проверьте права доступа и существование директории.")
    Exit
EndIf
FileWrite($file, $cooXYZ)
FileClose($file)

; Вывод результата
MsgBox(0, "Результат", "Файл успешно создан и текст записан: " & $filePath)

; Очистка файла console.log Удаляем файл и создаем заново что бы облегчить поиск и вес
If FileExists($res1) Then
    FileDelete($res1)
EndIf
FileWrite($res1, "")
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Local $file = FileOpen(StringInStr($filePath), 2)
Проблема в этой строке.
Во-первых, функция StringInStr требует второй параметр.
Во-вторых, она возвращает позицию найденной подстроки. То есть будет попытка открыть файл с именем в виде числа и без расширения.
 
Верх