Jack Famous,
Немного из итырнета
Кликните здесь для просмотра всего текста
Сходства между VBA и Batch (CMD)
Процедурный подход
Оба языка выполняют команды последовательно, сверху вниз.
Работа с переменными
В VBA: Dim x As String, в Batch: set «x=значение».
Значения хранятся как строки (в Batch нет типов Integer, Boolean и т.д.).
Условные операторы (If)
VBA:
Visual Basic | ||
|
Batch:
Visual Basic | ||
|
Циклы (For, While)
VBA (перебор файлов):
Visual Basic | ||
|
batch
Visual Basic | ||
|
Комментарии
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
У вас недостаточно прав для того чтобы тут гадить.