Что нового

Как скопировать папку/файл и вставить его в нужный мне диск с помощью AutoIt

renom

Новичок
Сообщения
127
Репутация
2
Собсно сабж.
Пример:
Копируется файл Win32,который находится на рабочем столе и вставляется в диске D,C.

Выручайте :smile:
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Такс,ну с этим проблем не возникло.Возникла в другом месте:
К примеру нужно скопировать файл формата .ftt - при этом не зная имени данного файла,но известен диск,в котором лежит данный файл.

У меня получилось примерно так:
Код:
FileCopy("'\С:\*.ftt'", "D:\GAMES\*.*")


Подскажите,в чем ошибка?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
renom
Код:
If FileExists("C:\*.ftt") Then
	MsgBox(0, '', FileCopy("C:\*.ftt", "D:\GAMES\*.*", 8))
Else
	MsgBox(0, '', 'No file')
EndIf
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
madmasles сказал(а):
renom
Код:
If FileExists("C:\*.ftt") Then
	MsgBox(0, '', FileCopy("C:\*.ftt", "D:\GAMES\*.*", 8))
Else
	MsgBox(0, '', 'No file')
EndIf
Не получилось.

Дело в том,что так же неизвестно в какой папке лежит данный файл(WINDOWS,Program Files,Documents and Settings и т.д.)
но известно,что в диске С:\
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
renom [?]
Дело в том,что так же неизвестно в какой папке лежит данный файл(WINDOWS,Program Files,Documents and Settings и т.д.)
но известно,что в диске С:\
А так:
Код:
$sDest = 'D:\GAMES\*.*'
$aSearch = _FileSearch(@HomeDrive, '*.ftt', 1)

If $aSearch[0] Then
	MsgBox(64, '', 'Найдено файлов *.ftt: ' & $aSearch[0] & ' штук.')
	For $i = 1 To $aSearch[0]
		If Not FileCopy($aSearch[$i], $sDest, 9) Then
			MsgBox(16, 'Error', 'Ошибка копирования файла:' & @LF & $aSearch[$i])
		Else
			MsgBox(64, 'OK', 'Скопирован файл:' & @LF & $aSearch[$i])
		EndIf
	Next
Else
	MsgBox(16, 'Error', 'Не найдено файлов *.ftt.')
EndIf


Func _FileSearch($sPath, $sFileMask = '*', $iFlag = 0, $iSubdir = 1)
	;фильтры для поиска нужно указывать через ;
	;$iFlag = 0 - Файлы и папки (по умолчанию)
	;$iFlag = 1 - Только файлы
	;$iFlag = 2 - Только папки
	;$iSubdir = 1 - Искать во всех подкаталогах (по умолчанию)
	;$iSubdir = 0 - Искать только в самой папке
	Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sSubdir
	If $iSubdir Then
		$sSubdir = ' /S /B'
	Else
		$sSubdir = ' /B'
	EndIf
	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] & '"' & $sSubdir & $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   ;==>_FileSearch
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
madmasles сказал(а):
renom [?]
Дело в том,что так же неизвестно в какой папке лежит данный файл(WINDOWS,Program Files,Documents and Settings и т.д.)
но известно,что в диске С:\
А так:
Код:
$sDest = 'D:\GAMES\*.*'
$aSearch = _FileSearch(@HomeDrive, '*.ftt', 1)

If $aSearch[0] Then
	MsgBox(64, '', 'Найдено файлов *.ftt: ' & $aSearch[0] & ' штук.')
	For $i = 1 To $aSearch[0]
		If Not FileCopy($aSearch[$i], $sDest, 9) Then
			MsgBox(16, 'Error', 'Ошибка копирования файла:' & @LF & $aSearch[$i])
		Else
			MsgBox(64, 'OK', 'Скопирован файл:' & @LF & $aSearch[$i])
		EndIf
	Next
Else
	MsgBox(16, 'Error', 'Не найдено файлов *.ftt.')
EndIf


Func _FileSearch($sPath, $sFileMask = '*', $iFlag = 0, $iSubdir = 1)
	;фильтры для поиска нужно указывать через ;
	;$iFlag = 0 - Файлы и папки (по умолчанию)
	;$iFlag = 1 - Только файлы
	;$iFlag = 2 - Только папки
	;$iSubdir = 1 - Искать во всех подкаталогах (по умолчанию)
	;$iSubdir = 0 - Искать только в самой папке
	Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sSubdir
	If $iSubdir Then
		$sSubdir = ' /S /B'
	Else
		$sSubdir = ' /B'
	EndIf
	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] & '"' & $sSubdir & $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   ;==>_FileSearch
Сработало,спасибо.
Можно ли осущ. то же самое действие не подключая сюда "Поиск" ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
renom [?]
Можно ли осущ. то же самое действие не подключая сюда "Поиск" ?
Не стыкуется с этим:
Дело в том,что так же неизвестно в какой папке лежит данный файл(WINDOWS,Program Files,Documents and Settings и т.д.)
но известно,что в диске С:\
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
madmasles сказал(а):
renom [?]
Можно ли осущ. то же самое действие не подключая сюда "Поиск" ?
Не стыкуется с этим:
Дело в том,что так же неизвестно в какой папке лежит данный файл(WINDOWS,Program Files,Documents and Settings и т.д.)
но известно,что в диске С:\
А,все,ясно...
Большое спасибо.
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Возникла сложность в осуществлении следующего скрипта:
Код:
If FileExists("G:\") Then; 
DirCreate("G:\4210\")
FileSetAttrib('G:\4210\', '+H')
FileOpen('%appdata%\118234\118235\')
FileCopy('118236\*.*', 'G:\4210')
EndIf


Может кто не понял что я хочу,поэтому решил показать это в cmd:
@if exist G:\ goto: lala
:lala
@Cd %appdata%\118234\118235\
@xcopy ("118236\*.*" "G:\4210") /E
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
renom
Код:
If FileExists('G:\') Then;
	DirCreate('G:\4210')
	FileCopy(@AppDataDir & '\118236\*.*', 'G:\4210\')
	FileSetAttrib('G:\4210', '+H', 1)
EndIf
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Разъясню,может что не так:
Необходимо скопировать папку(ее имя не известно),которая находится в папке 118236.
Вот полный путь:
C:\Documents and Settings\admin\Application Data\118234\118235\118236\
В папке 118236 создал папку test и кинул туда блокнот,но увы копирование не выходит. :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
renom
Так должно скопировать все папки
Код:
#include <File.au3>

If FileExists('G:\') Then;
	DirCreate('G:\4210')
	$aFolders = _FileListToArray(@AppDataDir & '\118234\118235\118236', '*', 2)
	If IsArray($aFolders) Then
		For $i = 1 To $aFolders[0]
			DirCopy(@AppDataDir & '\118234\118235\118236\' & $aFolders[$i], 'G:\4210\' & $aFolders[$i], 1)
		Next
		FileSetAttrib('G:\4210', '+H', 1)
	EndIf
EndIf

В первом моем варианте все файлы копирует.
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
madmasles сказал(а):
renom
Так должно скопировать все папки
Код:
#include <File.au3>

If FileExists('G:\') Then;
	DirCreate('G:\4210')
	$aFolders = _FileListToArray(@AppDataDir & '\118234\118235\118236', '*', 2)
	If IsArray($aFolders) Then
		For $i = 1 To $aFolders[0]
			DirCopy(@AppDataDir & '\118234\118235\118236\' & $aFolders[$i], 'G:\4210\' & $aFolders[$i], 1)
		Next
		FileSetAttrib('G:\4210', '+H', 1)
	EndIf
EndIf

В первом моем варианте все файлы копирует.
Это помогло - спасибо :smile:
 

Dreps

Новичок
Сообщения
5
Репутация
0
Здравствуйте!
Не буду создавать новую тему по аналогичному вопросу, а задам здесь.
Каждый день в папке 123 создаются файлы (..., file2903, file3003). Завтра будет file3103, послезавтра file0104 и т.д. Скрипт будет запускаться 1 раз в день. Надо скопировать именно новый файл в папке 123 и скопировать его в сетевую папку \\comp\123
Можно ли так сделать?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Dreps
если твой вопрос аналогичен вопросу этой темы, то решение уже есть. читай посты выше. если не подходит решение, то создай тему. так как твой вопрос не совсем аналогичен. а лучше поискать:
как определить самый новый файл в папке. в справке есть все необходимое.
либо в Стол заказов, если сам писать не хочешь
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Dreps
Код:
FileCopy(@ScriptDir & "\123\file" & @MDAY & @MON, "\\comp\123")
 

Dreps

Новичок
Сообщения
5
Репутация
0
InnI сказал(а):
Код:
FileCopy(@ScriptDir & "\123\file" & @MDAY & @MON, "\\comp\123")
Отлично! Немного изменил под себя, файл копируется.
InnI, а возможно сделать визуально процесс копирования? Если файл 200-300 Мб, то скрипт висит как запущенный и после завершения копирования закрывается. Не видно как копируется, не очень удобно.
 
Верх