Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Перенос по N фалов в каждую папку созданную из списка. (http://forum.oszone.net/showthread.php?t=311650)

hruckt 16-02-2016 11:14 2606618

Перенос по N фалов в каждую папку созданную из списка.
 
Доброго времени суток.
Прошу помощи.
Есть такая практическая задача. Существует папка A с файлами (jpg). они отсортированы по времени их создания. Есть файл name.txt со списком имен.
Количество файлов в 3 раза больше чем имен.
Необходимо создать папку (первую из списка) и переместить (не копировать) в нее 3 первых файла из папки А, потом создать папку (вторую из списка) и переместить туда следующие 3 файла(хотя на тот момент по идее они уже будут первые).
И так до тех пор, пока не закончатся все файлы (соответственно и названия в списке файла name.txt)

Примечание. Необходимо строго соблюдать очередность: самое первое название папки из списка, соответствует первым трем (по дате создания) файлам

Iska 17-02-2016 05:04 2606933

Вопросы:
  1. Файлы сортируем по возрастанию или убыванию даты создания? То есть, какие должны быть у нас в начале — более новые или более старые?
  2. Список имён в файле «name.txt» содержит относительные или абсолютные имена папок?
  3. Если относительные — то относительно чего: текущего каталога или исходного каталога?
Вот болванка:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Мои проекты\38
set sMask=*.jpg
set sFolderList=C:\Мои проекты\38\name.txt

if exist "%sSourceFolder%\." (
        pushd "%sSourceFolder%"
       
        if exist "%sFolderList%" (
                for /f "usebackq delims=" %%i in ("%sFolderList%") do (
                        2>nul md "%%~i"
                       
                        for /f "usebackq tokens=1* delims=[]" %%j in (
                                `2^>nul dir /b /a:-d /o:d /t:c "%sSourceFolder%\%sMask%" ^| find.exe /n /v ""`
                        ) do if %%j leq 3 >nul move "%%~k" "%%~i\"
                )
        ) else (
                echo Can't find folder list file [%sFolderList%].
                exit /b 2
        )
       
        popd
) else (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

endlocal
exit /b 0


для условий:
  1. Файлы сортируются по возрастанию, т.е. более старые — в начале.
  2. Список имён содержит относительные имена папок.
  3. Имена считаются заданными относительно исходной папки.


Время: 21:42.

Время: 21:42.
© OSzone.net 2001-