Что нового

[Файловая система] Сортировка файлов по папкам исходя из названия

TotKtoNado96

Новичок
Сообщения
7
Репутация
0
Версия AutoIt: 3.

Описание: Прошу помощи с программой, которая отсортирует файлы по папкам:
в имени файла есть "урок" - идет в папку "Обучение";
есть "нал" - в папку "Прон"
нувыпонели. Очинь нада

Примечания:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Ну, раз
, пробуйте так :
Код:
#include <File.au3>

$Folder = @ScriptDir & '\Моя папка' ; папка , в которой производить поиск файлов
$Folder_1 = @ScriptDir & '\Обучение\' ;Путь к папке "Обучение"
$Folder_2 = @ScriptDir & '\Прон\' ;Путь к папке "Прон"
$aFile = _FileListToArray($Folder, Default, 1)
If Not @error Then
	For $i = 1 To $aFile[0]
		If StringInStr($aFile[$i], 'урок') Then FileMove($Folder & '\' & $aFile[$i], $Folder_1)
		If StringInStr($aFile[$i], 'нал') Then FileMove($Folder & '\' & $aFile[$i], $Folder_2)
	Next
EndIf
 
Автор
T

TotKtoNado96

Новичок
Сообщения
7
Репутация
0
ra4o сказал(а):
Ну, раз
, пробуйте так :
Код:
#include <File.au3>

$Folder = @ScriptDir & '\Моя папка' ; папка , в которой производить поиск файлов
$Folder_1 = @ScriptDir & '\Обучение\' ;Путь к папке "Обучение"
$Folder_2 = @ScriptDir & '\Прон\' ;Путь к папке "Прон"
$aFile = _FileListToArray($Folder, Default, 1)
If Not @error Then
	For $i = 1 To $aFile[0]
		If StringInStr($aFile[$i], 'урок') Then FileMove($Folder & '\' & $aFile[$i], $Folder_1)
		If StringInStr($aFile[$i], 'нал') Then FileMove($Folder & '\' & $aFile[$i], $Folder_2)
	Next
EndIf

А если вот так? Что делать, чтоб стал не таким корявым?
Код:
#include <File.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

MsgBox (0, "enter filemasks", "три окна с вводом маски")

$hGui = GUICreate("GUI", 530, 160, @DesktopWidth / 2 - 190, @DesktopHeight / 2 - 80, -1, $WS_EX_ACCEPTFILES)
;маски
$m1 = GUICtrlCreateInput('маска1', 10, 5, 250, 20)
$m2 = GUICtrlCreateInput('маска2', 10, 30, 250, 20)
$m3 = GUICtrlCreateInput('маска3', 10, 55, 250, 20)
;папки
$f1 = GUICtrlCreateInput('папка1', 270, 5, 250, 20)
$f2 = GUICtrlCreateInput('папка2', 270, 30, 250, 20)
$f3 = GUICtrlCreateInput('папка3', 270, 55, 250, 20)

GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

$f = @ScriptDir ; папка, в которой искать
;пути к папкам, куда надо фасовать
$f1 = @ScriptDir & '/' & $f1
$f2 = @ScriptDir & '/' & $f2
$f3 = @ScriptDir & '/' & $f3

$aFile = _FileListToArray($f, Default, 1)

If Not @error Then
    For $i = 1 To $aFile[0]
        If StringInStr($aFile[$i], $m1) Then FileMove($f & '\' & $aFile[$i], $f1)
        If StringInStr($aFile[$i], $m2) Then FileMove($f & '\' & $aFile[$i], $f2)
        If StringInStr($aFile[$i], $m3) Then FileMove($f & '\' & $aFile[$i], $f2)
    Next
EndIf
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
В таком виде работать не будет. Вы не получаете содержимое "Input" ,для начала замените строки :
Код:
;так не правильно, в переменной $f1 у Вас дескриптор Input-а , а не его содержимое
$f1 = @ScriptDir & '/' & $f1
;Нужно так:( Плюс не затирать дескриптор, а назначить свою переменную)
$f1_read = @ScriptDir & '/' & GuiCtrlRead($f1)
;Это касается всех строк, где Вы получаете содержимое "Input" да и других элементов, если они у Вас будут.
;Например эта строка тоже не верная:
If StringInStr($aFile[$i], $m1) Then FileMove($f & '\' & $aFile[$i], $f1)
;Нужно так (с учётом изменений выше):
If StringInStr($f&'\'&$aFile[$i], GuiCtrlRead($m1)) Then FileMove($f & '\' & $aFile[$i], $f1_read)
 
Автор
T

TotKtoNado96

Новичок
Сообщения
7
Репутация
0
ra4o сказал(а):
В таком виде работать не будет. Вы не получаете содержимое "Input" ,для начала замените строки :
Код:
;так не правильно, в переменной $f1 у Вас дескриптор Input-а , а не его содержимое
$f1 = @ScriptDir & '/' & $f1
;Нужно так:( Плюс не затирать дескриптор, а назначить свою переменную)
$f1_read = @ScriptDir & '/' & GuiCtrlRead($f1)
;Это касается всех строк, где Вы получаете содержимое "Input" да и других элементов, если они у Вас будут.
;Например эта строка тоже не верная:
If StringInStr($aFile[$i], $m1) Then FileMove($f & '\' & $aFile[$i], $f1)
;Нужно так (с учётом изменений выше):
If StringInStr($f&'\'&$aFile[$i], GuiCtrlRead($m1)) Then FileMove($f & '\' & $aFile[$i], $f1_read)

извиняюсь, если надоел)
переписал, но окно со вводом маски не выходит. Что не так с GUI?

Код:
#include <File.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Local $m1, $m2, $m3, $f1, $f2, $f3, $BtnOk, $msg, $sText

MsgBox (0, "enter filemasks", "три окна с вводом маски")

$hGui = GUICreate("GUI", 530, 160, @DesktopWidth / 2 - 190, @DesktopHeight / 2 - 80, -1, $WS_EX_ACCEPTFILES)
;маски
$m1 = GUICtrlCreateInput('маска1', 10, 5, 250, 20)
$m2 = GUICtrlCreateInput('маска2', 10, 30, 250, 20)
$m3 = GUICtrlCreateInput('маска3', 10, 55, 250, 20)
;папки
$f1 = GUICtrlCreateInput('папка1', 270, 5, 250, 20)
$f2 = GUICtrlCreateInput('папка2', 270, 30, 250, 20)
$f3 = GUICtrlCreateInput('папка3', 270, 55, 250, 20)

$BtnOk = GUICtrlCreateButton("OK", (380 - 70) / 2, 127, 70, 26)

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $BtnOk
            $sText = 'Garaş'
    EndSwitch
WEnd
GUISetState()


$f = @ScriptDir ;папка, в которой искать
$f1_read = @ScriptDir & '/' & GuiCtrlRead($f1) ;пути к папкам, куда надо фасовать
$f2_read = @ScriptDir & '/' & GuiCtrlRead($f2)
$f3_read = @ScriptDir & '/' & GuiCtrlRead($f3)

$aFile = _FileListToArray($f, Default, 1)

If Not @error Then
    For $i = 1 To $aFile[0]
        If StringInStr($f&'\'&$aFile[$i], GuiCtrlRead($m1)) Then FileMove($f & '\' & $aFile[$i], $f1_read, 8)
        If StringInStr($f&'\'&$aFile[$i], GuiCtrlRead($m2)) Then FileMove($f & '\' & $aFile[$i], $f2_read, 8)
        If StringInStr($f&'\'&$aFile[$i], GuiCtrlRead($m3)) Then FileMove($f & '\' & $aFile[$i], $f2_read, 8)
    Next
EndIf
 
Верх