1

Тема: CMD/BAT: Копирование файлов больше заданного размера

Добрый день!
Столкнулся с необходимостью осуществления фильтра в папке:
- Чтобы отбирались файлы *.xml
- Размером больше 5 Мб
Искал софт - не подошло.

В .bat особо не силен. Сам бы начал искать решение в xcopy, но не знаю, как же задать атрибут по размеру.

Может ли кто растолковать, как же можно такой батник сделать. Какие команды и т.д.?
Теперь это прям личное дело. Вроде и файл уже не настолько нужен, а вот понять самому, как можно осуществить - другое дело.

2

Re: CMD/BAT: Копирование файлов больше заданного размера

Вроде, ROBOCOPY позволяет, но по умолчанию она, кажется, в висте появилась. В семёрке - точно есть.

3

Re: CMD/BAT: Копирование файлов больше заданного размера


H:\ > for /?
...
Операции подстановки ссылок на переменные команды FOR
также расширены. Допускается применение следующих
синтаксических конструкций:

    %~I         - из переменной %I удаляются обрамляющие кавычки (")
    %~fI        - переменная %I расширяется до полного имени файла
    %~dI        - из переменной %I выделяется только имя диска
    %~pI        - из переменной %I выделяется только путь к файлу
    %~nI        - из переменной %I выделяется только имя файла
    %~xI        - из переменной %I выделяется расширение имени файла
    %~sI        - полученный путь содержит только короткие имена
    %~aI        - переменная %I расширяется до атрибутов файла
    %~tI        - переменная %I расширяется до даты /времени файла
    %~zI        - переменная %I расширяется до размера файла
    %~$ПУТЬ:I   - проводится поиск по каталогам, заданным в
                         переменной среды ПУТЬ, и переменная %I
                         заменяется на полное имя первого найденного
                         файла.  Если переменная ПУТЬ не определена или
                          в результате поиска не найден ни один файл,
                          то этот модификатор заменяется на пустую
                          строку.
...

Для сравнения больше или меньше.


H:\ > if /?
...
Изменение команды IF при включении расширенной обработки команд:

    IF [/i] строка1 оператор_сравнения строка2 команда
    IF CMDEXTVERSION число команда
    IF DEFINED переменная команда

где оператор_сравнения принимает следующие значения:

    EQL - равно
    NEQ - не равно
    LSS - меньше
    LEQ - меньше или равно
    GTR - больше
    GEQ - больше или равно,
...

Что-то вроде:


setlocal ENABLEEXTENSIONS
for /f %%a in ('dir /b /s /a-d "путь_где_лежат_файлы\*.xml"') do (
if %%~za GTR 5000000 (
         echo %%~fa
         rem для перемещения файлов измените строку выше.
)
)

Решение медленное (!) т.к. будет перебирать свойства каждого файла и, в соответствии с условием, совершать действия над файлом.

4

Re: CMD/BAT: Копирование файлов больше заданного размера

Serge Yolkin пишет:

Вроде, ROBOCOPY позволяет, но по умолчанию она, кажется, в висте появилась. В семёрке - точно есть.

на машине стоит Server2003. Там вроде как нет robocopy

5

Re: CMD/BAT: Копирование файлов больше заданного размера

UNDYING пишет:


Решение медленное (!) т.к. будет перебирать свойства каждого файла и, в соответствии с условием, совершать действия над файлом.

думаю, даже медленное решение вполне подойдет. спасибо! сейчас до конца вникну в него.
будет ли этот батник смотреть папку на файловом сервере с другой машины?

6

Re: CMD/BAT: Копирование файлов больше заданного размера

OleGus пишет:

будет ли этот батник смотреть папку на файловом сервере с другой машины?

Непринципиально, только работать будет ещё медленнее.


setlocal ENABLEEXTENSIONS
for /f %%a in ('dir /b /s /a-d "\\my_superserver\share\*.xml"') do (
if %%~za GTR 5000000 (
      move /y %%~fa C:\my_folder\%%~nxa
)
)

Переместит файлы с ресурса на сервере в локальную папку с заменой существующих (если, например, файл с таким именем уже есть).
Если move откажется работать, ещё есть copy/xcopy и del.

7 (изменено: OleGus, 2013-08-06 14:46:36)

Re: CMD/BAT: Копирование файлов больше заданного размера

UNDYING, ну теперь это просто обязано работать ) еще раз спасибо!

8

Re: CMD/BAT: Копирование файлов больше заданного размера

Robocopy есть во всех Resource Kit'ах:

+ открыть спойлер

http://img694.imageshack.us/img694/2263/j1ww.png


OleGus, избегайте излишнего цитирования; не надо цитировать всю «портянку» предыдущего сообщения целиком. Я поправил Ваши посты.

9

Re: CMD/BAT: Копирование файлов больше заданного размера

можно последнее объяснение: что означает
%%a
%%~za
%%~fa
%%~nxa
?

если мы тут

move /y %%~fa C:\my_folder\%%~nxa

указываем сетевую папку - ставим её в ""?
не понимая значения "%%~nxa" - не могу задать верный сетевой путь

10

Re: CMD/BAT: Копирование файлов больше заданного размера

можно последнее объяснение: что означает

+ for /?
Операции подстановки ссылок на переменные команды FOR также расширены.
Допускается применение следующих синтаксических конструкций:

    %~I         - из переменной %I удаляются обрамляющие кавычки (")
    %~fI        - переменная %I расширяется до полного имени файла
    %~dI        - из переменной %I выделяется только имя диска
    %~pI        - из переменной %I выделяется только путь к файлу
    %~nI        - из переменной %I выделяется только имя файла
    %~xI        - из переменной %I выделяется расширение имени файла
    %~sI        - полученный путь содержит только короткие имена
    %~aI        - переменная %I расширяется до атрибутов файла
    %~tI        - переменная %I расширяется до даты /времени файла
    %~zI        - переменная %I расширяется до размера файла
    %~$PATH:I   - проводится поиск по каталогам, заданным в переменной
                   среды PATH, и переменная %I заменяется на полное
                   имя первого найденного файла.  Если переменная PATH 
                   не определена или в результате поиска не найден ни
                   ни один файл, то этот модификатор заменяется на пустую
                   строку

При объединении нескольких операторов можно получить следующие результаты:

    %~dpI       - переменная %I заменяется только на имя диска и путь
    %~nxI       - переменная %I заменяется только на имя файла и его 
                   расширение
    %~fsI       - переменная %I заменяется только на полный путь с 
                   краткими именами
    %~dp$PATH:I - проводится поиск по каталогам, заданным в переменной
                   среды PATH, и переменная %I заменяется на имя диска
                   и путь к первому найденному файлу.
    %~ftzaI     - переменная %I заменяется на строку, выдаваемую
                   командой DIR

В приведенных выше примерах переменные %I и PATH можно заменить на
любые другие допустимые значения. В таких синтаксических конструкциях 
за символами %~ может следовать любое имя переменной цикла FOR. 
Рекомендуется использовать заглавные буквы для имен таких переменных, 
например, %I, что делает их более заметными, а также позволяет отличать 
их от обозначений модификаторов, которые не различают используемый регистр.

11

Re: CMD/BAT: Копирование файлов больше заданного размера

еще вопрос:

при таком коде


setlocal ENABLEEXTENSIONS
for /f %%a in ('dir /b /s /a-d "\\my_superserver\share\*.xml"') do (
if %%~za GTR 5000000 (
      move /y %%~fa C:\my_folder\%%~nxa
)
)

просматривается весь каталог, включая вложенные папки. что нужно указать, чтобы просматривался только старший каталог?

12

Re: CMD/BAT: Копирование файлов больше заданного размера

По идее - в команде DIR надо убрать ключ /S

Посмотреть описание к ключам - выполните:

dir /? > c:\_dir.txt

а потом поизучайте файлик c:\_dir.txt

WBR. Roman

13

Re: CMD/BAT: Копирование файлов больше заданного размера

ок. перехожу к описаниям. спасибо

14 (изменено: OleGus, 2013-08-08 14:43:12)

Re: CMD/BAT: Копирование файлов больше заданного размера

решение нашел в удалении /f в этой строке


for /f %%a in ('dir /b /s /a-d "\\my_superserver\share\*.xml"') do (