Что нового

FileCopy - копирование в папку с непостоянным именем

Pat4005

Новичок
Сообщения
85
Репутация
4
Не знаю как можно в функции FileCopy указывать имя папки:
Код:
FileCopy("C:\kontur*\stat.......ТАК?
То есть название папки "kontur" может варьироваться(дополняться любыми символами, но после слова "kontur").
 

running-frag

why me?
Сообщения
441
Репутация
60
Ну простейший вариант это найти эту папку там. И вставить при запросе.

А вообще конечно это в сторону регулярок (если FileCopy их поддерживает). В противном случае имя папки искать всё же придётся отдельно.


Добавлено:
Сообщение автоматически объединено:

На счёт поиск нужной папки. http://autoit-script.ru/index.php/topic,8266.0.html
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Pat4005
пробуй так

Код:
$folder_path = 'c:\temp'
$aReturn = _FileSearch($folder_path, '*',0,0)
For $i = 1 To $aReturn[0]
	$test = StringRegExp($aReturn[$i], 'test')
	If $test = 1 Then
		DirCopy($folder_path & '\' & $aReturn[$i], 'c:\copy', 1)
	EndIf
Next

;ниже идет функция написанная CreatoR
Func _FileSearch($sPath, $sFileMask = '*', $iFlag = 0, $iSubDir = 1, $iSort = 0)
	Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sFiles

	If Not StringInStr(FileGetAttrib($sPath), "D") Then
		Return SetError(1, 0, 0)
	EndIf

	If $iSubDir = 1 Then
		$sAttrib &= ' /S'
	EndIf

	If $iSort = 1 Then
		$sAttrib &= ' /O:N'
	EndIf

	Switch $iFlag
		Case 1
			$sAttrib &= ' /A-D'
		Case 2
			$sAttrib &= ' /AD'
		Case Else
			$sAttrib &= ' /A'
	EndSwitch

	$sOut = StringToBinary('0' & @CRLF, 2)
	$sPath = StringRegExpReplace($sPath, '\\+$', '')
	$sFileMask = StringRegExpReplace($sFileMask, '^;+|;+$', '')
	$sFileMask = StringRegExpReplace($sFileMask, ';{2,}', ';')
	$aMasks = StringSplit($sFileMask, ';')

	For $i = 1 To $aMasks[0]
		If StringStripWS($aMasks[$i], 8) = "" Then
			ContinueLoop
		EndIf

		$sFiles &= '"' & $sPath & '\' & $aMasks[$i] & '"'

		If $i < $aMasks[0] Then
			$sFiles &= ';'
		EndIf
	Next

	$hDir = Run(@ComSpec & ' /U /C DIR ' & $sFiles & ' /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

	$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)

	If @error Or UBound($aOut) < 2 Then
		Return SetError(2, 0, 0)
	EndIf

	$aOut[0] = UBound($aOut) - 1
	Return $aOut
EndFunc   ;==>_FileSearch
исходная папка на диске С это temp. в ней папка test из которой нужно скопировать файлы в папку c:\copy. даже если там будет несколько папок в названии которых будет test, например: test12 , @34djdjskltestlasdfhl ну и как в голову взбредет, то из этих папок будут скопированы все файлы и папки.
 

madmasles

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

$aDir = _FileListToArray('C:\', 'kontur*', 2)
If @error Then Exit - 33
_ArrayDisplay($aDir)
 
Верх