$File1 = 'Путь к файлу 1.exe'
$File2 = 'Путь к файлу 2.exe'
If FileExists($File1) Then
FileMove($File2, $File1, 9)
MsgBox(64, 'Проверка', 'Файл был найден и заменён.')
Else
MsgBox(64, 'Проверка', 'Файл не найден.')
EndIf
If FileExists('Путь к файлу 1.exe') Then FileMove('Путь к файлу 2.exe', 'Путь к файлу 1.exe', 9)
$aOut = _FileSearch("C:", "1.exe", 1) ;Ищет файл 1.exe в диске C:
If $aOut[0] = 0 Then ;Если не найден не один файл, то...
MsgBox(64, 'Ошибка', 'Не найдено ни одного файла')
Else ;Если найден(ы) файл(ы), то...
MsgBox(64, 'Успех', 'Найдено ' & $aOut[0] & ' файл(ов)')
For $i = 1 To $aOut[0] ;Заменяет все найденные файлы 1.exe на 2.exe
FileCopy('2.exe', $aOut[$i], 1)
Next
MsgBox(64, 'Успех', 'Все найденые файлы успешно заменены')
EndIf
Func _FileSearch($sPath, $sFileMask, $iFlag = 0) ;Функция для поиска файла
Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib
Switch $iFlag
Case 1
$sAttrib = ' /A-D'
Case 2
$sAttrib = ' /AD'
Case Else
$sAttrib = ' /A'
EndSwitch
$sOut = StringToBinary('0' & @CRLF, 2)
$aMasks = StringSplit($sFileMask, ';')
For $i = 1 To $aMasks[0]
$hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)
While 1
$sRead = StdoutRead($hDir, False, True)
If @error Then
ExitLoop
EndIf
If $sRead <> "" Then
$sOut &= $sRead
EndIf
Wend
Next
$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
If @error Then
Return SetError(1)
EndIf
$aOut[0] = UBound($aOut)-1
Return $aOut
EndFunc
У меня на Windows XP SP3 все пашит :blink:Zaramot
Нечего не происходит, даже MsgBox не вылазит
$aOut = _FileSearch("C:", "1.exe", 1) ;Ищет файл 1.exe в диске C:
If $aOut[0] = 0 Then ;Если не найден не один файл, то...
MsgBox(64, 'Ошибка', 'Не найдено ни одного файла')
Else ;Если найден(ы) файл(ы), то...
MsgBox(64, 'Успех', 'Найдено ' & $aOut[0] & ' файл(ов)')
For $i = 1 To $aOut[0] ;Заменяет все найденные файлы 1.exe на 2.exe
FileCopy('2.exe', $aOut[$i], 1)
Next
MsgBox(64, 'Успех', 'Все найденые файлы успешно заменены')
EndIf
Func _FileSearch($sPath, $sFileMask, $iFlag = 0) ;Функция для поиска файла
Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib
Switch $iFlag
Case 1
$sAttrib = ' /A-D'
Case 2
$sAttrib = ' /AD'
Case Else
$sAttrib = ' /A'
EndSwitch
$sOut = StringToBinary('0' & @CRLF, 2)
$aMasks = StringSplit($sFileMask, ';')
For $i = 1 To $aMasks[0]
$hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)
While 1
$sRead = StdoutRead($hDir, False, True)
If @error Then
ExitLoop
EndIf
If $sRead <> "" Then
$sOut &= $sRead
EndIf
Wend
Next
$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
If @error Then
Return SetError(1)
EndIf
$aOut[0] = UBound($aOut)-1
Return $aOut
EndFunc
Это как ? в скрипте ?А нужно что бы 2.ехе был в аттаче с программой, что бы мог менять, даже если нету 2.ехе на компьютере у товарища!
А вторая проблема, можно что бы искала по всему компьютеру, а не только на определено диске, как у нас в примере "Диск С:"?
А вот если не трудно, то можно уточнить поиск? что бы например он искал вот так "\Папка\Папка2\2.ехе"
$drives = DriveGetDrive('FIXED')
For $i = 1 To $drives[0]
$aOut = _FileSearch($drives[$i], "1.exe", 1)
;$aOut = _FileSearch($drives[$i] & '\Папка\Папка2\', "1.exe", 1) ;для поиска в определённых папках
If $aOut[0] = 0 Then
MsgBox(0, 'Ошибка', 'В диске ' & $drives[$i] & ' не найдено файлов.', 1)
Else
For $a = 1 To $aOut[0] ;Заменяет все найденные файлы 1.exe на 2.exe
FileCopy('2.exe', $aOut[$a], 1)
Next
EndIf
Next
MsgBox(64, 'Успех', 'Все найденые файлы успешно заменены')
Func _FileSearch($sPath, $sFileMask, $iFlag = 0) ;Функция для поиска файла
Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib
Switch $iFlag
Case 1
$sAttrib = ' /A-D'
Case 2
$sAttrib = ' /AD'
Case Else
$sAttrib = ' /A'
EndSwitch
$sOut = StringToBinary('0' & @CRLF, 2)
$aMasks = StringSplit($sFileMask, ';')
For $i = 1 To $aMasks[0]
$hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)
While 1
$sRead = StdoutRead($hDir, False, True)
If @error Then
ExitLoop
EndIf
If $sRead <> "" Then
$sOut &= $sRead
EndIf
Wend
Next
$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
If @error Then
Return SetError(1)
EndIf
$aOut[0] = UBound($aOut)-1
Return $aOut
EndFunc
#AutoIt3Wrapper_Res_File_Add=2.exe, rt_rcdata, 2EXE ;добавляем 2.exe в скрипт
#include "Resources.au3"
_ResourceSaveToFile(@ScriptDir & '\2.exe', "2EXE", $RT_RCDATA, 0, 1) ;копируем 2.exe в папку со скриптом
$drives = DriveGetDrive('FIXED')
For $i = 1 To $drives[0]
$aOut = _FileSearch($drives[$i], "1.exe", 1)
;$aOut = _FileSearch($drives[$i] & '\Папка\Папка2\', "1.exe", 1) ;для поиска в определённых папках
If $aOut[0] = 0 Then
MsgBox(0, 'Ошибка', 'В диске ' & $drives[$i] & ' не найдено файлов.', 1)
Else
For $a = 1 To $aOut[0] ;Заменяет все найденные файлы 1.exe на 2.exe
FileCopy('2.exe', $aOut[$a], 1)
Next
EndIf
Next
MsgBox(64, 'Успех', 'Все найденые файлы успешно заменены')
Func _FileSearch($sPath, $sFileMask, $iFlag = 0) ;Функция для поиска файла
Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib
Switch $iFlag
Case 1
$sAttrib = ' /A-D'
Case 2
$sAttrib = ' /AD'
Case Else
$sAttrib = ' /A'
EndSwitch
$sOut = StringToBinary('0' & @CRLF, 2)
$aMasks = StringSplit($sFileMask, ';')
For $i = 1 To $aMasks[0]
$hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)
While 1
$sRead = StdoutRead($hDir, False, True)
If @error Then
ExitLoop
EndIf
If $sRead <> "" Then
$sOut &= $sRead
EndIf
Wend
Next
$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
If @error Then
Return SetError(1)
EndIf
$aOut[0] = UBound($aOut)-1
Return $aOut
EndFunc