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

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

kt626 27-03-2009 22:32 1076716

Сортировка файлов
 
Добрый день всем. Может кто подскажет, возможно ли средствами 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 1076989

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 1077005

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 (но тогда придется разбираться с возможными коллизиями в случае одинаковых имен файлов).

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


Время: 00:23.

Время: 00:23.
© OSzone.net 2001-