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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
я как начну кодить так не че не идет...мне тока полный код...и то сам знаешь вчера тока и его с 3 раза запустил)))
 
так как время идет циклами - может сделать по такому алгоритму ?
 
1.берется  файл 24_H.csv из него вырезается 25 последних строк и отправляется во временный файл 24_H.tmp
2.файл 24_H.csv сохраняется ( уже без 25 строк последних)
3.из 24_H.tmp вырезается последняя строка
4.в 24_H.tmp ищется время - допустим 2:00:00 и до этого времени вырезаются все строки с конца
5.То что в итоге остается в файле 24_H.tmp добавляется в конец файла 24_H.csv
6.24_H.tmp удаляется
 
или с циклами лучше будет...?
 
сам не сделаю вся надежда на вас...

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 19:04 02-12-2009
Ortios



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Эх, с мануалами по SED туго, я имею ввиду чтобы научиться писать скрипты на SED, используя pattern space и pattern hold. Пока остается в сотый раз перечитывать sed man и regexp man и разбирать примеры которые по крупицам можно нагуглить в инете ну и плюс еще хорошая статья Антона Тарасова - полезные однострочные скрипты SED.

Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 19:15 02-12-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ortios
Я, помимо man sed и regexp читал какой-то древний мануал под соляру, но сейчас негде набрать `man'
 
FGHGJGJSD22
Если отрезать строки после последнего вхождения 2:00:00:

Код:
 
@echo off
setlocal
pushd "D:\1_PR"
 
for /f "tokens=1 delims=:" %%i in ('findstr /n "\<2:00:00" 24_H.csv') do set /a "line=%%i+1"
 
1>1.tmp sed "%l%,$d" 24_H.csv  
move 1.tmp 24_H.csv
popd
 

 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:00 02-12-2009 | Исправлено: 01MDM, 20:04 02-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
чет у меня опять не идет...файл 24_H.csv обнуляется - в нем все пропадает...
пробелы с кода убрал , запускаю как батник(расш кмд поставил)
в чем проблема может быть ?

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 20:57 02-12-2009 | Исправлено: FGHGJGJSD22, 20:57 02-12-2009
GreG



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

Цитата:
Да лучше - проще забрать и перезаписать новым:
 

а нельзя так сделать чтоб новое значение вставлялось в конец текста другого файла например 2.txt или чтоб в файле 1.txt находилось не только число которое будет увеличиваться а еще и текст который не должен изменяться.

Всего записей: 1149 | Зарегистр. 22-10-2001 | Отправлено: 22:50 02-12-2009
01MDM



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

Цитата:
в чем проблема может быть ?

Замени %l% на %line% - думал одно, а писал другое.
И выполни в консоли echo %path% - прописан там путь к GnuWin32\bin? Если нет добавь строчку из предыдущего батника.
 
 
Добавлено:
GreG
Приведи пример, как файл должен выглядеть.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:49 02-12-2009 | Исправлено: 01MDM, 23:55 02-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не смог сообщение удалить(щас пропишу в коде срочку к GnuWin32\bin)

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 00:11 03-12-2009 | Исправлено: FGHGJGJSD22, 00:15 03-12-2009
GreG



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

Цитата:
Приведи пример, как файл должен выглядеть.  

л/с №7987988098 текущее значение 2222 (это то число которое должно меняться)

Всего записей: 1149 | Зарегистр. 22-10-2001 | Отправлено: 00:23 03-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Прописал строчку - все пошло !
код такой теперь
-------
@echo off
setlocal
pushd "D:\1_PR"
set "PATH=%PATH%;C:\Program Files\GnuWin32\bin"
for /f "tokens=1 delims=:" %%i in ('findstr /n "\<2:00:00" 24_H.csv') do set /a "line=%%i+1"
1>1.tmp sed "%line%,$d" 24_H.csv
move 1.tmp 24_H.csv
popd
-------------
Но надо чтоб при следующем  запуске батника  если последняя срока имеет
указанное время ( 2:00:00 ) она игнорировалась !- и обрезка продолжилась !-
тоесть до следующей строки с указанным временем 2:00:00  
тоесть запустили батник - он обрезал - стало допустим
01.12.2009 2:00:00;109 - то есть 1 число 12 мес 2009г 2:00:00
сразу запускаем батник и он уже эту строчку игнорирует! и получится
должно  
30.11.2009 2:00:00;88
тоесть минус сутки...
что то можно сделать ?
первый батник для удаления 1 строки использывать не желательно !  
потому как время увеличится обработки ( файлы могут быть довольно большие по обьему)

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 00:39 03-12-2009 | Исправлено: FGHGJGJSD22, 00:49 03-12-2009
AnGo



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

Цитата:
Все бы хорошо, но:
 
 

YoungBatman

Цитата:
 
Делал файл на работе, скачал по вышеприведенной ссылке ид дома(думал можа по дороге на файлобменник побился), однако

 
Ты всё делаешь правильно. А 01MDM нужно разблокировать файл в свойствах файла. Это типо защита такая от M$, что бы домохозяйки случайно не навредили своему компу...

Всего записей: 1076 | Зарегистр. 07-07-2002 | Отправлено: 05:44 03-12-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnGo
Почему другие chm не требуют разблокировки?
 
GreG

Цитата:
л/с №7987988098 текущее значение 2222 (это то число которое должно меняться)


Код:
 
@echo off
setlocal enabledelayedexpansion
 
for /l %%i in (150,1,200) do set "num_!random!=%%i"
for /f "tokens=2 delims==" %%i in ('set num_') do set "rand_num=%%i"
 
:: файл 1.txt с предыдущим значением  
for /f "tokens=5" %%i in ('type 1.txt') do set /a "num=%%i+rand_num"
 
:: Перезаписываем 1.txt
1>nul chcp 1251
1>1.txt echo л/с №7987988098 текущее значение %num%
 
 
echo вставляем %num% в "body" письма  
 

 
 
 
 
Добавлено:
FGHGJGJSD22
Ты все усложняешь с каждым новым вопросом. Может лучше сразу удалять последнюю строку? Исправь так:

Код:
 
@echo off
setlocal
pushd "D:\1_PR"
 
1>1.tmp sed "$d" 24_H.csv
move 1.tmp 24_H.csv

for /f "tokens=1 delims=:" %%i in ('findstr /n "\<2:00:00" 24_H.csv') do set /a "line=%%i+1"
 
1>1.tmp sed "%l%,$d" 24_H.csv  
move 1.tmp 24_H.csv
popd
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:35 03-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Большое спасибо ! - все пошло ! (только заменил %l% на %line%)

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 18:28 03-12-2009
MoBiRo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написал скриптик для создания бэкапов данных на сервере, но почему-то приходят пустые файлы по 0 байт. Я сначала думал, что проблема в пути т.к. у юзеров могут быть имена на кириллице (путь я прописал вот так %USERPROFILE%\ђ Ў®зЁ© бв®«\Backup\*.dat), но проблема видимо не в этом, раз на сервере появляются файлы с конкретными именами (появляются все файлы, что нужны), если бы он не воспринимал имя юзера кириллицей, то файлов там естественно не было. Но я всё не могу понять почему они по 0 байту. Тестировал у себя на машине - работает, на соседней машине - тоже работает. На третьей машине он отправляет пустые файлы =( Из-за чего он отправляет их пустыми?  
 
Вот скрипт
 

Код:
@echo off
 
:first
Ping -n 1 someserver.ru
If ErrorLevel 1 Goto first
 
cd "%USERPROFILE%\ђ Ў®зЁ© бв®«\Backup\"
 
path=%DATE:~6,4%%DATE:~2,4%%DATE:~0,2%
 
echo somelogin@someserver.ru>>ftp.txt
echo somepassword>>ftp.txt
echo mkdir %path%>>ftp.txt
echo cd %path%>>ftp.txt
echo mput *.dat>>ftp.txt
echo quit>>ftp.txt
 
ftp -s:ftp.txt -i FTP.someserver.ru
 
del ftp.txt
exit

Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 02:58 04-12-2009 | Исправлено: MoBiRo, 04:55 04-12-2009
01MDM



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

Цитата:
path=%DATE:~6,4%%DATE:~2,4%%DATE:~0,2%  

 
set path=...
 
И лучше выбрать другое название для переменной.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:20 04-12-2009
den4363

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста.  
Есть папка Project в ней 3 папки с подпапками и  bat-ник, необходимо чтоб bat-ник архивирывал эти папки, припустим в c:\Temp\project, тудаже перемещал себя, а папку Project удалял. Помогите пожалуйста реализовать.

Всего записей: 1 | Зарегистр. 04-12-2009 | Отправлено: 23:46 04-12-2009
MoBiRo

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

Цитата:
set path=...

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

Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 09:24 05-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Приветствую , Хороший человек.
Два вопроса.
1.Забыл спросить а как мне в моем коде сделать наоборот,чтоб не с конца а с начала строки удалялись?
этот код удаляет с конца(минус одна строка и минус до строки со временем 2 00 00)
@echo off
setlocal
pushd "D:\1_PR"
set "PATH=%PATH%;C:\Program Files\GnuWin32\bin"
1>1.tmp sed "$d" 24_H.csv
move 1.tmp 24_H.csv
for /f "tokens=1 delims=:" %%i in ('findstr /n "\<2:00:00" 24_H.csv') do set /a "line=%%i+1"
1>1.tmp sed "%line%,$d" 24_H.csv
move 1.tmp 24_H.csv
popd
---------
как сделать наоборот но чтоб с начала файла удалялось 2 строки потом до времени ?
 
2.Что прописать в конце кода батника - чтоб после его выполнения он запускал себя
снова - то количество раз которое укажешь.Тоесть ставится цифра 200 - он будет запускать сам себя после первого запуска его руками 200 раз...
или сделать отдельный батник чтоб он запускал тот который укажешь - но смотрел чтоб запуск происходил после выполнения всего кода батника....

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 12:40 05-12-2009 | Исправлено: FGHGJGJSD22, 18:43 05-12-2009
AnGo



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

Цитата:
Почему другие chm не требуют разблокировки?

Да кто-ж его знает.
 
А более серьезно см. сюда:
http://support.microsoft.com/kb/892675
http://support.microsoft.com/kb/896054

Всего записей: 1076 | Зарегистр. 07-07-2002 | Отправлено: 15:57 05-12-2009
zumicator

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Делаю первые шаги в батанике. Хочу получить для дальнейшей обработки дату последнего обращения к файлу. Вот что получилось:  
for /f "skip=3 tokens=1" %%i in (' dir df* /t:a ') do (
set var=%%i  
)
echo %var%
 
df - то мой файл
 
вывод команды dir:  
 Том в устройстве C имеет метку Data
 Серийный номер тома: CACC-994E
 
 Содержимое папки C:\xxx\xxx...
 
 
05.12.2009  19:46               131 df.bat
               1 файлов            131 байт
               0 папок  20 798 472 192 байт свободно
 
первые три строки  пропустил, а что делать 2 последующими? В итоге то var = 0 у меня...
 
И ещё почему то ключ /t:a в команде dir выдаёт туже дату что и /t:c , то есть создания файла.
 
Подскажите где косяк? А может есть более простые решения?

Всего записей: 5 | Зарегистр. 05-12-2009 | Отправлено: 18:40 05-12-2009
BakLAN



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поясните, пожалуйста. Нужно импортировать данные в реестр. Создаk cmd-файл, записал в него следующее:

Код:
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\Files" /v "*.*" /d "" /f

 и сохранил. Нажимаю Enter, файл данные вроде импортируются, но когда потом проверяю в реестре соответствующую ветку, вижу, что ничего не импортировано. При этом, если прежде вызываю cmd.exe, вставляю в коммандную строку вышеуказанную команду, данные в реестр импортируются. В чём загвоздка?  
 
P.S. WinXP x64 SP2.

Всего записей: 2843 | Зарегистр. 15-12-2003 | Отправлено: 02:15 06-12-2009 | Исправлено: BakLAN, 02:16 06-12-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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru