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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FGHGJGJSD22
С помощью sed ( http://gnuwin32.sourceforge.net/packages/sed.htm )

Код:
 
@echo off
setlocal
 
for /f "tokens=2 delims=:" %%i in ('find /c /v "" file.txt') do set /a lines=%%i-2
 
1>file.tmp sed -n "1,%lines% p" file.txt
move file.tmp file.txt
 

 
 
Добавлено:
GreG

Цитата:
рандомное значение от 150 до 200


Код:
 
@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
echo %rand_num%
 


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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
Если не трудно разжуйте тупому...
 
sed-4.2-1-setup установил...
что дальше хз... запукаю код пишет сед не является командой и т.д...
 
 
вообщем если будет желание напишите пожалуйста код для вырезания из  
файла 1.txt  (он лежит на диске С )
чтоб из него удалялись последние 3 строки...
и может еще че установить нужно ?
 
заранее благодарен...
сам не сделаю...вся надежда на вас...

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



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

Цитата:
sed-4.2-1-setup установил...

А куда он установился? Нужно его поместить в переменную %PATH%:

Код:
 
@echo off
setlocal
 
pushd C:\
 
set PATH=%PATH%;C:\Program Files\Sed\bin
for /f "tokens=2 delims=:" %%i in ('find /c /v "" 1.txt') do set /a lines=%%i-3
 
1>1.tmp sed -n "1,%lines% p" 1.txt
move 1.tmp 1.txt
 
popd
 

Удаляет последние 3 строки из C:\1.txt.
 

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
 
C:\Documents and Settings\1>@echo off
setlocal
 
pushd C:\
 
set PATH=%PATH%;C:\Program Files\Sed\bin
for /f "tokens=2 delims=:" %%i in ('find /c /v "" 1.txt') do set /a lines=%%i-3
 
Непредвиденное появление: %%i.
 
1>1.tmp sed -n "1,%lines% p" 1.txt
sed: -e expression #1, char 3: unexpected `,'
move 1.tmp 1.txt
Заменить C:\1.txt [Yes (да)/No (нет)/All (все)]:  
 
 
 
Вожу код в командной строке - вот что появляется - при этом на диске С
создается временный файл 1.tmp - его открывал в блокноте он пустой...
 
да или нет или все - все что не ввожу не приводит к результатам - потом
тхт файл 1 просто пустой! ставновится после открытия...
 
На счет седа я когда его устанавливал ( sed-4.2-1-setup ) - то он встал в
C:\Program Files\GnuWin32
 
ввожу в ком строке echo %path%
 
пишет  
 
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Sed\bin
- тоесть как я понял он при инсталяции сам добавился в переменную %PATH%
 
так в чем же тогда дело ?
из файла не 3 строки удаляются а ВСЕ ! ???

Всего записей: 44 | Зарегистр. 09-07-2007 | Отправлено: 23:49 01-12-2009
01MDM



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

Сохрани батник в файл, например в 1.cmd, что бы запустить просто щелкни по нему мышью. Так же можно его (1.cmd) исполнить из cmd.exe
И пропиши реальный путь:

Код:
 
set PATH=%PATH%;C:\Program Files\GnuWin32\bin  
 

 

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



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

Цитата:
как сделать чтоб из тхт файла у далялось заданное количество строк с конца ?

Этот код удалит в файле 1.txt последние 4 строчки и результат запишет в файл 2.txt

Код:
set lines=4
sed -n -e :a -e "1,%lines%!{P;N;D;};N;ba" 1.txt >2.txt

Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 00:17 02-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
не идет.. точнее тоже самое - тхт после выполнения батника - пустой...
 
код такой -
 
@echo off  
setlocal  
 
pushd C:\  
 
set PATH=%PATH%;C:\Program Files\GnuWin32\bin    
for /f "tokens=2 delims=:" %%i in ('find /c /v "" 1.txt') do set /a lines=%%i-3  
   
1>1.tmp sed -n "1,%lines% p" 1.txt  
move 1.tmp 1.txt  
 
popd
 
сохранил как батник(сменил расширение на смд) и запускаю...
 
еще пробывал брать Program Files в кавычки (тоесть словосочетание с пробелом)
не помогло...
в чем дело может быть ?
если не трудно проверьте на своем компе и скинте заведоморабочий батник...
а то я с ума сойду)))

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FGHGJGJSD22
Так я проверял.. У меня работает, убери, если есть концевые пробелы (это болезнь форума). Попробуй вариант Ortios.
 

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
елки палки - точно - пробелы насованы были)))
- убрал все пошло!
Огромное спасибо !
 
Еще вопрос - как сэмулировать нажатие клавиши(клавиатуры) батником ?
(погуглил - чет не че не нашел)

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



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

Цитата:
рандомное значение от 150 до 200  

а как мне это значение передать чтоб оно прибавлялось к предыдущему значению и вставлялось в тело письма

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



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

Цитата:
Еще вопрос - как сэмулировать нажатие клавиши(клавиатуры) батником ?

Опять же с помощью стороннего софта. С помощью NirCmd ( http://www.nirsoft.net/utils/nircmd.html ). В архиве подробная справка в chm-формате, с примерами. Ищи секцию `sendkey'
 
GreG

Цитата:
а как мне это значение передать чтоб оно прибавлялось к предыдущему значению и вставлялось в тело письма

А где хранится "предыдущее значение"? Прибавить просто:

Код:
 
@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
 
set /a <предыдущее значение>+=rand_num  
 

На счет письма не советчик, т.к не пользуюсь консольными почтовыми отправлялками. Смотри тему по Blat  
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:21 02-12-2009
yurkesha



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Цитата:
(это болезнь форума)
нет - это болезнь не форума
Привожу пример того же кода:

Код:
@echo off
setlocal
pushd C:\
set "PATH=%PATH%;C:\Program Files\GnuWin32\bin"
for /f "tokens=2 delims=:" %%i in ('find /c /v "" 1.txt') do set /a "lines=%%i-3"
1>1.tmp sed -n "1,%lines% p" 1.txt
move 1.tmp 1.txt
popd

 
 


----------
sic transit gloria mundi

Всего записей: 2701 | Зарегистр. 15-12-2003 | Отправлено: 10:30 02-12-2009
GreG



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

Цитата:
А где хранится "предыдущее значение"?

предыдущие значение хранится в текстовом файле, в тексте, как мне на него конкретно указать?или лучше создать отдельный файл с предыдущим значением?

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yurkesha
Да, помню, обсуждали, каюсь.
 
 
Добавлено:
GreG

Цитата:
предыдущие значение хранится в текстовом файле, в тексте, как мне на него конкретно указать?

Зависит от формата файла

Цитата:
или лучше создать отдельный файл с предыдущим значением?

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

Код:
 
@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 с предыдущим значением - просто одно число  
0<1.txt set /p "num="
 
set /a num+=rand_num
 
:: Перезаписываем 1.txt
1>1.txt echo %num%
 
 
echo вставляем %num% в "body" письма    
 

 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:38 02-12-2009
Wilion

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как реализовать следующее: в папке <Мои документы> есть папка <Печать>, в ней *.doc файлы. Их необходимо распечатать на принтере и удалить из папки. Информация: ноутбук, XPpro SP2, подключение принтера через USB.

Всего записей: 201 | Зарегистр. 24-08-2009 | Отправлено: 14:34 02-12-2009
FGHGJGJSD22

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
Всем здравствуйте.
 
На диске D в папке 1_PR лежит файл 24_H.csv
 
D:\1_PR\24_H.csv
 
24_H.csv имеет следующий формат -
число.месяц.год(пробел)время(ч:мин:сек);число
 
10.11.2009 23:00:00;44
11.11.2009;22
11.11.2009 1:00:00;33
11.11.2009 2:00:00;1
11.11.2009 3:00:00;3
11.11.2009 4:00:00;3
11.11.2009 5:00:00;77
 
- надо сделать так чтобы с конца этого файла удалялись строки
по времени !(дата игнорируется и на нее не смотрим)
- допустим прописано в батнике 2:00:00 значит
все нижние строки до 2:00:00 должны удалится
- тоесть должно получится так -
 
10.11.2009 23:00:00;44
11.11.2009;22
11.11.2009 1:00:00;33
11.11.2009 2:00:00;1
 
(строки  
11.11.2009 4:00:00;3
11.11.2009 5:00:00;77
удалены)
 
Какой код должен быть для такого батника ?

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FGHGJGJSD22
Попробуй так (при условии, что 2:00:00 единственный в файле):

Код:
 
@echo off
pushd "D:\1_PR"
 
1>1.tmp sed -ne "/.* 2:00:00.*/,$! p" -e "/.* 2:00:00.*/ p" 24_H.csv
move 1.tmp 24_H.csv
popd
 


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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
в том то и дело что не единственный! файл с данными за несколько лет....
поэтому и надо автоматизировать вырезку последних строк по зад  времени...

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FGHGJGJSD22
Ну, в догонку и от меня вариант, раз уж решил задачу - надо озвучить (оранжировка 01MDM)

Код:
@echo off
pushd "D:\1_PR"
 
1>1.tmp sed "/2:00:00/p;/2:00:00/,$d" 24_H.csv  
move 1.tmp 24_H.csv  
popd

 
Добавлено:
FGHGJGJSD22
Хе, братец, что ж ты раньше не сказал, что время у тебя может повторяться.
На Sed такое уже сложновато будет изобразить, надо будет писать с циклами и проверками, боюсь сходу я такое не потяну.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ortios
Подскажи мануал. У тебя лихо получается
 
Добавлено:
FGHGJGJSD22
Ortios
Найти последнюю строку с 2:00:00 можно так:

Код:
 
for /f "tokens=1 delims=:" %%i in ('findstr /n "\<2:00:00" 24_H.csv') do set "line=%%i"
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:35 02-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