Windows скопировать файлы по маске

Jack Famous,
Немного из итырнета

Кликните здесь для просмотра всего текста

Сходства между VBA и Batch (CMD)
Процедурный подход

Оба языка выполняют команды последовательно, сверху вниз.

Работа с переменными

В VBA: Dim x As String, в Batch: set «x=значение».

Значения хранятся как строки (в Batch нет типов Integer, Boolean и т.д.).

Условные операторы (If)

VBA:

Visual Basic
1
2
3
If condition Then
    ' Действие
End If

Batch:

Visual Basic
1
2
3
if условие (
    rem Действие
)

Циклы (For, While)

VBA (перебор файлов):

Visual Basic
1
2
3
For Each file In folder.Files
    ' Действие
Next

batch

Visual Basic
1
2
3
for %%f in (*.txt) do (
    echo Файл: %%f
)

Комментарии

VBA: ‘ Текст комментария

Batch: rem Текст или :: Текст

Запуск внешних команд

VBA: Shell «cmd /c dir»

Batch: напрямую dir, copy, move и т.д.

Работа с файлами и папками

Оба поддерживают:

Копирование (FileCopy в VBA ↔ copy в Batch).

Удаление (Kill в VBA ↔ del в Batch).

Проверка существования (Dir() в VBA ↔ if exist в Batch).

Главные отличия
Типы данных

В VBA есть строгая типизация (Integer, String, Boolean).

В Batch всё — строка (даже числа).

Функции и процедуры

В VBA можно создавать функции (Function, Sub).

В Batch — только линейный код (можно имитировать через call и метки).

Обработка ошибок

VBA: On Error Resume Next.

Batch: при ошибке скрипт просто падает (нужно вручную проверять errorlevel).

Отладка

VBA: есть дебаггер (пошаговое выполнение, точки останова).

Batch: только echo и pause для диагностики.

Как копировать папки из каталога по маске?

У меня есть директория с подпапками в которых есть папки с названием LOG и BACKUP в большом количестве.Как мне с директории запустить скрипт который найдёт все LOG и BACKUP в подпапках и сохранит их в отдельный каталог без слияния (Потипу LOG1 , LOG2… и тд )


  • Вопрос задан

  • 1109 просмотров

Пригласить эксперта

Ищите папки по маске с помощью dir: dir /b /ad c:\temp\log*
Засовываем этот dir в for /f:

for /f "tokens=* delims=" %%a in ('dir ...') do (
   echo %%a
)

В цикле копируем отобранные папки.
Для инкрементации счетчика папок используем set /a "logidx=logidx+1"
Для справки:

for /?
dir /?
set /?
if /?
copy /?
move /?
md /?

Войдите, чтобы написать ответ


  • Показать ещё
    Загружается…

Минуточку внимания

Перейти к содержимому раздела

Серый форум

разработка скриптов

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2012-07-30 23:22:31 (изменено: obse, 2012-07-31 00:53:57)

  • obse
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Тема: CMD/BAT: Поиск по маске, копирование, переименование

Доброго времени суток Уважаемые.
Перечитал все темы и понял, что я ничего не понял. Пытался сам создать батник, но явно я в этом ничего не понимаю. Прошу помочь написать код для следующей задачи:
Бат-файл запускается с любого места на компе. Необходимо найти все файлы на компьютере (диски c,d,e,f,….) по маске (*.txt — маска будет меняться периодически ручками) и скопировать их на диск D:\test\, при этом надо учесть, чтоб повторяющиеся имена файлов переименовывались примерно так: doc.txt, doc(1).txt, doc(2).txt,…… и не копировалась повторно сама же папка D:\test\. Желательно, чтоб при запуске батника окно сворачивалось в панель задач.

P.S. Поиском пользоваться умею и похожие темы читал, но не укладывается это в моей голове, извините. Спасибо.

2 Ответ от alexii 2012-07-31 00:39:36

  • alexii
  • Разработчик
  • Неактивен

Re: CMD/BAT: Поиск по маске, копирование, переименование

obse, прочтите Правила форума. Прочтите это. Я поправил оформление Вашего поста.

Обратите внимание на правило: «один вопрос — одна тема».

3 Ответ от obse 2012-07-31 00:57:02

  • obse
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: CMD/BAT: Поиск по маске, копирование, переименование

Спасибо за замечания, одну задачу снял с сообщения. Прочитал правила и вторую тему относительно заголовка. С заголовком думал ветка языка программирования подставится автоматом, ну а в теле сообщения без помощи мне не обойтись. Сорри.

4 Ответ от obse 2012-07-31 11:36:20 (изменено: obse, 2012-07-31 11:40:53)

  • obse
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: CMD/BAT: Поиск по маске, копирование, переименование

alexii, я видел на форуме вы с похожим сталкивались, может посмотрите, что не так. С переменными у меня вообще все сложно. Вот пытаюсь что-то делать, но не уверен.

@echo off
md d:\test
xcopy /y /h "C:\, D:\, E:\, F:\ *.txt" "d:\test"
pause

Думаю уже тут есть ошибки, не работает. А с заменой имен по счетчику совсем не понимаю.

5 Ответ от obse 2012-07-31 18:57:24

  • obse
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: CMD/BAT: Поиск по маске, копирование, переименование

Пока топчусь на месте, решения нет.

6 Ответ от Rom5 2012-08-01 12:58:20

  • Rom5
  • Участник
  • Неактивен
  • Рейтинг : [1|0]

Re: CMD/BAT: Поиск по маске, копирование, переименование

Я вобще не слышал о копировании с переименованием дублей стандартными средствами XCOPY.

Я бы попробовал организовать это дело архивированием с хранением нескольких версий файла. Например, архиватором WinRAR такое можно сделать, см.его хэлп.

WBR. Roman

7 Ответ от Flasher 2012-08-04 17:03:58

  • Flasher
  • Заблокирован
  • Неактивен

Re: CMD/BAT: Поиск по маске, копирование, переименование

obse
Тут на vbs могу сделать. На cmd лень..

8 Ответ от MegaScrew 2012-08-07 11:43:48

  • MegaScrew
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: CMD/BAT: Поиск по маске, копирование, переименование

При тестировании встречались такие пути: C:\Users\User\AppData\Local\Mozilla\Firefox\Profiles\u0j93lbe.default\Cache\B\* в результате чего появлялось сообщение: Не удается найти указанный файл. Это сообщение генерируется при копировании так что на него можно не обращать внимания так как батник работает дальше без проблем.

@echo off
if "%1"=="" goto :help
if "%2"=="" goto :help

set rashirenie=%1
set target=%2

for %%f in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( call :copyfind %%f)
goto :exit

rem ##########################################################
:copyfind
cd %~1:\ 
if %errorlevel% == 0 ( 
    for /r %~1:\ %%i in (dir *.%rashirenie% /B /A-D) do @if exist "%%i" (if not "%%i" == "%~fnx0" (if not "%%~dpi" == "%target%" ( call :chekcopy "%%i" 1 "%%i")))
)
exit /b 0
rem ##########################################################


rem ##########################################################
:chekcopy
if %ERRORLEVEL% GTR 0 exit /b 0

if not exist "%target%%~nx1" ( 
    copy "%~f3" "%target%%~nx1"
    exit /b 7 ) 

set newfile=%~n1
set /a count=%~2+1
set /a countold=%~2-1
    
if "%newfile:~-3%"=="(%countold%)" (
    call :chekcopy "%~dp1%newfile:~0,-3%(%~2)%~x1" %count% %3
    exit /b 7
    )

if "%newfile:~-3%"=="(%~2)" ( 
    call :chekcopy "%~dp1%newfile:~0,-3%(%count%)%~x1" %count% %3
    exit /b 7
    )

call :chekcopy "%~dp1%newfile%(%~2)%~x1" %count% %3
exit /b 0
rem ##########################################################

rem ##########################################################
:help
echo Использование: %~nx0 bat C:\1_test\
echo Расширение указывать без точки, только 3 буквы: doc или txt или bat или xls и т.д.
echo При указании директории куда будут копироваться найденные файлы указывайте полный путь. Букву диска указывайте с большой буквы.
echo.
echo Описание: Пакетный файл ищет файлы по задонному расширению на дисках от C до Z и копирует их в заданную директорию. Если в директории уже есть файлы 
echo с таким же именем то он их копирует с добавлением номера (вот так (1), (2), (3)) Если файлов с динаковым именем больше 10 то 
echo переименование получит вид: имя файла (10)(11). Надеюсь у вас такого не будет :)
echo.
echo Внимание! Если в вашей системе есть кард ридер то возможно появление сообщения что устройство не готово, просто нажмите кнопку продолжить в окне и все, так было у меня.
exit /b 0
rem ##########################################################
:exit

Сообщения 8

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Выберите вариант загрузки:

  • скачать с сервера SoftPortal

FDFSpy — программа для автоматического копирования выбранных по маске файлов с подключаемых к компьютеру съёмных носителей информации в выбранную папку на локальном диске (полное описание…)

Рекомендуем популярное

WinHex 21.4

WinHex — универсальный HEX-редактор. Как редактор дисков позволяет работать с жесткими…

AOMEI Backupper 7.4.1

AOMEI Backupper — бесплатный инструмент для резервного копирования и восстановления данных, которые могут возникнуть при различных сбоях системы…

Hasleo Disk Clone 5.2

Бесплатное приложение, которое позволяет вам перенести вашу ОС Windows на другой жесткий…

Информация о материале

Просмотров: 17866

Сегодня я хочу поделиться с вами одним из приемов копирования файлов. Бывает ситуация, когда нужно найти и скопировать определённые файлы на компьютере, конечно, можно воспользоваться поиском, но это не всегда удобно и приемлемо. Например, нам нужно скопировать все файлы с расширением txt удаленно или просто через консоль, тогда и приходит на помощь данный метод: нужно открыть терминал (Пуск -> Выполнить и набрать cmd), после чего набрать команду для рекурсивного копирования файлов (xcopy) и передать ей параметр S, благодаря которому не будут копироваться пустые папки.

xcopy /S "C:\*.txt" F:\txt_files\

Так же данный метод копирования позволяет сохранить файлы с одинаковым именем, так как копируется и иерархия папок. У команды xcopy несколько больше возможностей, задаваемых параметрами ее вызова. Полный список параметров и их описание можно найти в справке по команде, набрав в терминале help xcopy. Аналогичные действия можно выполнить и в ОС Linux, арсенал которой намного богаче, чем у Windows. В Linux для рекурсивного копирования всех файлов, имеющих расширение txt из указанной папки, необходимо воспользоваться двумя командами: cp — копирование файлов и find — для поиска нужных файлов.

cp -i $(find ./ -name "*.txt") ./txt_files/

Также вы можете указать параметр r для того, чтобы избежать потери дублирующихся файлов и сохранить иерархию папок, как в случае с xcopy в ОС Windows.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

У вас недостаточно прав для того чтобы тут гадить.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Download bittorrent for windows 10 64 bit
  • Windows api windows update
  • Как сгенерировать ssh keys для git windows 10
  • Загрузочный диск windows server на флешку
  • Inpa k dcan windows 10