Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
о структуре данные засекречены заказчиком. я у себя на компе дбф файлы поискал - все они просто прямые файлы, в которые последовательно записывается некая последовательность данных. прекрасно склеится.  
 

Цитата:
 
DBF — формат хранения данных, используемый в качестве одного из стандартных способов хранения и передачи информации системами управления базами данных, электронными таблицами и т. д.
 
Достоверно неизвестно, имели ли файлы предшественников dBase — Vulcan и JPLDIS это расширение, но dBase II уже использовал DBF-файлы в качестве стандартного формата базы.
 
В новых версиях — dBase III, dBase IV формат файла модифицировался и расширялся. В связи с высокой популярностью этих программ были созданы их многочисленные клоны (обычно их называют общим термином xBase), некоторые из которых использовали модифицированные версии DBF. То же самое происходило и с целым рядом прикладных пакетов и библиотек, использовавших DBF в различных целях — некоторые их авторы шли по пути добавления новых типов полей, некоторые — вносили серьёзные расширения. В связи с отсутствием какой-то официальной стандартизации в настоящее время достаточно сложно гарантировать, что разрабатываемая прикладная программа будет писать и читать произвольный DBF-файл, но базовая совместимость всё-таки сохраняется.
 
DBF-файл делится на заголовок, в котором хранится информация о структуре базы (в новых версиях — и о некоторых других характеристиках, например используемой кодовой таблице) и количестве записей и собственно — область данных, представляющую собой последовательно организованную таблицу из записей фиксированной длины. В свою очередь записи делятся на поля также фиксированной длины, которые хранятся в файле непосредственно друг за другом, образуя запись. Первое поле DBF-формата — пометка удаления. Длина поля — 1 символ. Если поле установлено в значение 2A16 (символ «звёздочка»), то считается, что запись помечена на удаление. Удалённые записи могут быть восстановлены, или физически удалены при выполнении специальной операции, называемой упаковкой (команда PACK xBase).
 
С DBF-файлами могут быть так же сопряжены другие файлы — .DBT (dBase III, IV,Clipper), .FPT (FoxBASE/FoxPro) и, в некоторых случаях, какие-то ещё, предназначенные для хранения больших объектов переменной длины. .DBT/.FPT-файлы не являются самостоятельными и не могут быть прочитаны без соответствующего им .DBF файла. В связи с этим их описание обычно включают в качестве составной части описания формата .DBF.
 

 
заголовок надо отрезать.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:16 08-09-2009 | Исправлено: bomzzz, 14:50 08-09-2009
Kilyan



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Просил о реализации или возможности проделать склеивание нескольких ДБФ-файлов, а не размышлений на эту тему.
З.Ы. Если кто обладает данной реализацией - подскажите, что да как, не откажусь от примера!
А type и copy и иные --тут не пригожи (bomzzz)
 

Цитата:
"Склеить" dbf можно только специальными утилитами. Или возиться с VBS/JS или другими скриптовыми языками, через ADO, например.

Smitis может  у вас примерчик найдется ?

Всего записей: 886 | Зарегистр. 04-09-2008 | Отправлено: 14:54 08-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если заголовок есть не скелить - потому что батники не работают с бинарными файлами а умеют их только копировать. а адо вообще из другой оперы
 
DBF reader and writer 1.5
 
 
 

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:01 08-09-2009 | Исправлено: bomzzz, 15:11 08-09-2009
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
bomzzz

Цитата:
а адо вообще из другой оперы

ADO из области обработки баз данных. DBF - это файл базы данных.
 
Kilyan

Цитата:
может  у вас примерчик найдется ?

 
Примерчика у меня к сожалению не осталось, уже несколько лет прошло, когда я с этим возился. Но начать поиск можно с сайта, ссылку на который я дал.
 
Вот ещё утилита для DBF: http://forum.ru-board.com/topic.cgi?forum=35&topic=24522&start=120#lt
Сейчас проверил - два простых DBF одинаковой структуры без memo объединил.

----------
Разум когда-нибудь победит

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 15:49 08-09-2009 | Исправлено: Smitis, 15:57 08-09-2009
crom86

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
 
Помогите начинающему:
есть каталог, в нём каждый день появляется одна папка (имя всегда разное). Нужно имя этой папки присвоить переменной (средствами cmd). Как?
 
Заранее благодарен.

Всего записей: 3 | Зарегистр. 03-10-2008 | Отправлено: 16:41 08-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
ECHO OFF
COLOR 9F
CLS
FOR /R C:\TEMP %%I IN (.) DO SET MyPapka=%%~NI%
ECHO %MyPapka%
PAUSE
 

где c:\temp путь где папка валяется    
 

Цитата:
 
ECHO OFF
COLOR 9F
CLS
FOR /R C:\TEMP %%I IN (.) DO SET MyPapka=%%~NI%
IF %MyPapka%==TEMP (
ECHO NETU PAPKI
) ELSE (
ECHO %MyPapka%
)
PAUSE
 

то есть - если папки еще нету - то переменной присвоится значение корневой папки, поэтому мона определить есть папка или нету.  
при сравнении играет роль заглавные или нет буквы в имени корневой папки TEMP<>Temp

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:47 08-09-2009 | Исправлено: bomzzz, 06:05 09-09-2009
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
crom86

Цитата:
Помогите начинающему:  
есть каталог, в нём каждый день появляется одна папка (имя всегда разное). Нужно имя этой папки присвоить переменной (средствами cmd). Как?  

 

Код:
 
@echo off
for /d %%f in ( * ) do set d=%%f
echo %d%
 



----------
Разум когда-нибудь победит

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 23:56 08-09-2009
crom86

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем большое спасибо. Всё работает.

Всего записей: 3 | Зарегистр. 03-10-2008 | Отправлено: 10:16 09-09-2009
vITSaotome

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем. По-тихоньку начинаю осваивать возможности cmd, но появилась задача, которую нужно быстро решить (сегодня). Прошу помощи.
 
Есть папка с определенным именем Work (путь к папке должен указываться в скрипте). В этой папке создаются с разным уровнем вложенности другие папки и файлы. Среди созданных подпапок иногда проскакивают папки с именем "Temp". Нужно их отыскивать и удалять все содержимое.
 
Спасибо, заранее.

Всего записей: 9 | Зарегистр. 06-09-2006 | Отправлено: 12:14 09-09-2009
Malegik79

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые подскажите плиз, как в батнике узнать размер файла, записать размер в файл.txt и сравнить со значением которое находится в текстовом файле?

Всего записей: 7 | Зарегистр. 16-06-2009 | Отправлено: 12:26 09-09-2009
vITSaotome

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В принципе есть готовое похожее решение:
 
@Echo Off
 
Set TmpPath="D:\Work"
Set InStrVar=Temp
Set FilesMask=*.*
 
For /R "%TmpPath%" %%i In (.) Do Call :CheckTemp "%%i"
 
 
:CheckTemp
Set CurrDir=%~1
Set CurrDir=%CurrDir:~0,-2%
 
For %%a In ("%CurrDir%") Do Set "DirName=%%~nxa"
 
For /F "delims=" %%b In ('Echo %DirName%^| Find /I "%InStrVar%"') Do Set "DelPath=%CurrDir%\%FilesMask%"
 
If /I Exist "%DelPath%" (
    Del /Q /F "%DelPath%"
    ) Else (
    Exit /b 1
    )
 
Но здесь удаляются все папки, в имени которых найдено слово "Temp", т.е в том числе Temp_Sales и т.д. + если найдена папка "temp", а в ней находится еще одна папка "temp", то удаляются только файлы (мне нужно, чтобы удалялись и файлы, и подпапки, найденные в папке с именем = "temp").

Всего записей: 9 | Зарегистр. 06-09-2006 | Отправлено: 12:29 09-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Malegik79

Цитата:
 
%~zI Замена %I размером файла.  
 

 
vITSaotome наворочено очень, хоть бы ремарки в своем скрипте расписал
 
crom86
вариант  for /d %%f in (c:\temp\*) do set d=%%~Nf% тоже имеет свой смысл, если имя корневой папки может совпадать с именем появляющейся вложенной папки. тогда, при отсутствии вложенной папки, переменной вообще ничего не присваивается, и возникает ошибка в IF. ну ее конечно легко обойти if errorlevel , но поэкпериментировал, чета с кодом ошибки не получилось, так проще можно сначала проверку сделать if exist, или присвоить ей некое значение сначала. легко можно ключевую строку изменить если будет необходимость.  
через /R ищется включая субдиректории.

Цитата:
 
ECHO OFF
COLOR 9F
CLS
set MyPapka=TEMP
for /d %%f in (c:\temp\*) do set MyPapka=%%~Nf%
IF %MyPapka%==TEMP (
ECHO NETU PAPKI
) ELSE (
ECHO %MyPapka%
)
PAUSE  
 

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:44 09-09-2009 | Исправлено: bomzzz, 16:06 09-09-2009
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vITSaotome

Цитата:
Есть папка с определенным именем Work (путь к папке должен указываться в скрипте). В этой папке создаются с разным уровнем вложенности другие папки и файлы. Среди созданных подпапок иногда проскакивают папки с именем "Temp". Нужно их отыскивать и удалять все содержимое.  

 
Примерно так, сильно не тестировал, некогда:

Код:
 
@echo off
 
:: Переходим к папке Work
:: Выход, если папка не существует
cd /d D:\Work || exit
 
:: Цикл по всем папкам
for /f "delims=?" %%d in ( 'dir /b /s /ad *' ) do call :ddd "%%~d"
goto :eof
 
:ddd
 
:: Проверка имени
if /i not "%~nx1" == "temp" goto :eof
 
:: Переход в папку
pushd "%~1" 2> nul || goto :eof
:: Для безопасности проверяем ещё раз,
:: действительно ли переход осуществился :-)
if /i not "%cd%" == "%~1"  goto :eof
 
:: Удаляем содержимое, но не папку
echo Clear %1
rd /s/q . 2> nul
 
popd
 


----------
Разум когда-нибудь победит

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 20:19 09-09-2009 | Исправлено: Smitis, 20:20 09-09-2009
Smokeer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне нужно скопировать файлы из папки А в папку Б. При этом если файлы в А больше соответствующего файла в Б - переписать. Иначе - пропустить данный файл.
Как сравнить размеры файлов в рамке командной строки? ОЧЕНЬ желательно не использовать сторонние утилиты.

Всего записей: 782 | Зарегистр. 25-09-2005 | Отправлено: 07:12 10-09-2009
Leshgan



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Почему может быть такая ошибка?
 

Код:
 
D:\Backup>set /a aaa=08
Неправильное число. Числовые константы должны быть десятичными (17)
шестнадцатеричными (0x11),или восьмеричными (021).
 

 
но

Код:
 
D:\Backup>set /a aaa=07
 

 
сам код cmd:

Код:
 
set dd=%DATE%
 
set /a ddd=%dd:~0,2%
IF %ddd% LSS 10 (
  SET day=0%ddd%) else (
  SET day=%ddd%)
set month=%dd:~3,2%
set year=%dd:~6,4%
 
 

 
Когда 7е число месяца - всё нормально, но в 8е и 9е числа не срабатывает скрипт на строке set /a ddd=%dd:~0,2%
 

Всего записей: 187 | Зарегистр. 15-10-2002 | Отправлено: 09:22 10-09-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Leshgan

Код:
 
set /a ddd=1%dd:~0,2%-100
 

 
 
Добавлено:
Smokeer
Копируем из "folder 1" в "folder 2"

Код:
 
@echo off
for %%i in ("folder 1\*.*") do call:copy "%%i" "folder 2\%%~nxi"
goto:eof
 
:copy
if exist %2 (
    if %~z1 gtr %~z2 copy /y %1 %2
)
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:56 10-09-2009 | Исправлено: 01MDM, 09:57 10-09-2009
vITSaotome

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis, большое спасибо! Скрипт полностью рабочий.

Всего записей: 9 | Зарегистр. 06-09-2006 | Отправлено: 12:41 10-09-2009
dimpase

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем еще раз.Скажите как мне записать пинг в текст чтобы после времени задержки стояло еще время.
И все в одной строке.
Заранее спасибо.

Всего записей: 130 | Зарегистр. 29-09-2008 | Отправлено: 17:54 10-09-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimpase
Если не ошибаюсь, то этого сделать нельзя в реальном времени. Весь вывод в консоль идет только после того, как команда отработает. Т.е пакетом данных сразу.
пример:

Код:
 
C:\> for /f "tokens=*" %i in ('ping ya.ru') do @echo %time% %%i
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:47 10-09-2009
rubtraders

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые, подскажите.
 
Задача найти все видео файлы в сети. на всех расшареных ресурсах. а так же на невидимых
(типа \\server\video$)
 

Цитата:
FOR /F "skip=3 delims=\ " %%A IN ('NET VIEW') DO FOR /F "skip=7 delims=\ " %%B IN ('NET VIEW \\%%A') DO dir /S /B "\\%%A\%%B\*.avi"

 
такой конструкцией получается сделать список, но только не на скрытых:
 
хотелось бы ещё передать этот вывод для команды copy или del

Всего записей: 1 | Зарегистр. 11-09-2009 | Отправлено: 10:43 11-09-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru