Войти

Показать полную графическую версию : Сортировка файлов


kt626
27-03-2009, 22:32
Добрый день всем. Может кто подскажет, возможно ли средствами CMD реализовать следующий алгоритм:

Определим переменные Шаблон1, Шаблон2.... ШаблонN
Найти все файлы по расширению *.abc в папке "C\...\Конкретная_папка"
Пока Получить файл = 1 Цикл
Если find "Шаблон1" в текущем файле = 1 тогда Move текущий файл в папку "C\...\Шаблон1"
Если find "Шаблон2" в текущем файле = 1 тогда Move текущий файл в папку "C\...\Шаблон2"
............
Если find "ШаблонN" в текущем файле = 1 тогда Move текущий файл в папку "C\...\ШаблонN"
Конец цикла

Иными словами надо переместить файл из общей папки в папку, название которой содержится в текущем файле
Список возможных папок назначения (Шаблон) известен и немногочисленен (5-8)

Maza Faka
28-03-2009, 10:05
kt626
Пример:

@Echo Off

Set Source=C:\Test
Set Dest=C:
Set Ext=txt

For /R %Source% %%A In (*.%Ext%) Do (
MD "%Dest%\%%~nA">Nul 2>&1
Move "%%A" "%Dest%\%%~nA"
)

Petya V4sechkin
28-03-2009, 10:47
kt626, по вашему алгоритму:
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set Templates=Template1 Template2 Template3
Set FileMask=*.abc
Set Folder=C:\MyFolder

For /F "Delims=" %%I In ('Dir /A-D /B "%Folder%\%FileMask%" 2^>nul') Do (
Set FN=%%~nxI
For %%K In (%Templates%) Do (
If "!FN!" Neq "!FN:%%K=!" (
MD "C:\%%K" 2>nul
Move "%%I" "C:\%%K"
)
)
)

Если нужно учитывать вложенные папки, добавить опцию /S в команду Dir (но тогда придется разбираться с возможными коллизиями в случае одинаковых имен файлов).

Ограничение: в именах не должно быть символа ! (восклицательного знака).




© OSzone.net 2001-2012