Автор Тема: [Файловая система] Сортировка файлов по папкам исходя из названия  (Прочитано 378 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн TotKtoNado96 [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.

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

Примечания:

Русское сообщество AutoIt


Помечен как лучший ответ пользователем TotKtoNado96 Отправлен Январь 10, 2019, 10:43:32

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Ну, раз
Цитировать
Очинь нада
, пробуйте так :
Код: AutoIt [Выделить]
#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


Оффлайн TotKtoNado96 [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Ну, раз
Цитировать
Очинь нада
, пробуйте так :
Код: AutoIt [Выделить]
#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


А если вот так? Что делать, чтоб стал не таким корявым?
Код: AutoIt [Выделить]
#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


Русское сообщество AutoIt


Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
В таком виде работать не будет. Вы не получаете содержимое "Input" ,для начала замените строки :
Код: AutoIt [Выделить]
;так не правильно, в переменной $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)

 

« Последнее редактирование: Январь 12, 2019, 12:52:40 от ra4o »

Оффлайн TotKtoNado96 [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
В таком виде работать не будет. Вы не получаете содержимое "Input" ,для начала замените строки :
Код: AutoIt [Выделить]
;так не правильно, в переменной $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?

Код: AutoIt [Выделить]
#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


Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
17 Ответов
8940 Просмотров
Последний ответ Январь 28, 2012, 22:49:50
от madmasles
0 Ответов
1423 Просмотров
Последний ответ Август 16, 2013, 12:43:28
от Talany
10 Ответов
4312 Просмотров
Последний ответ Январь 23, 2014, 09:19:22
от madmasles
6 Ответов
2351 Просмотров
Последний ответ Октябрь 10, 2014, 10:27:33
от maxd2007
1 Ответов
1027 Просмотров
Последний ответ Декабрь 14, 2014, 13:25:10
от Garrett
6 Ответов
3353 Просмотров
Последний ответ Октябрь 14, 2015, 15:03:47
от NinjaScript
9 Ответов
2242 Просмотров
Последний ответ Июль 31, 2015, 13:46:00
от madmasles
2 Ответов
956 Просмотров
Последний ответ Ноябрь 25, 2015, 08:21:55
от xlgrgrc
4 Ответов
1284 Просмотров
Последний ответ Июнь 09, 2017, 20:57:08
от ra4o
3 Ответов
671 Просмотров
Последний ответ Октябрь 31, 2017, 07:03:10
от Anton1982