Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: 01MDM
Дата сообщения: 29.11.2009 16:05
qosmio5

Цитата:
Может я что-то не так делаю?

Не знаю, у меня все нормально на Win-7
Автор: qosmio5
Дата сообщения: 29.11.2009 16:32
01MDM

Все нормально работает в конкретном временном промежутке. Но если например часы - в однозначных числах с 0-я до 9-и, все значения принимаются за ноль (00:00:00) и соответственно изменение времени рассчитывается с этого - 00:20 или 23:40.

Спасибо.
Автор: 01MDM
Дата сообщения: 29.11.2009 19:27
Совсем забыл, что до 10 утра часы отображаются по-уродски. Исправь:

Код:
for /f "tokens=1-3 delims=:," %%i in ("%time: =0%") do ...
Автор: qosmio5
Дата сообщения: 29.11.2009 23:50
01MDM

Спасибо огромное, все заработало.

thanks!
Автор: dskj
Дата сообщения: 30.11.2009 13:46
01MDM

Спасибо, все работает как надо.
Автор: FGHGJGJSD22
Дата сообщения: 01.12.2009 15:55
как сделать чтоб из тхт файла у далялось заданное количество строк с конца ?
допустим тхт докум

привет
привет
ура
6666
привет

из его надо удалить последние 2 строки допустим
6666
и
привет

чтоб оканчательный вид был таким

привет
привет
ура

количество строк неизвесно и может менятся - тоесть надо прописать
чтоб просто удалялось опред кол строк...

подскажите плиз как сделать
Автор: GreG
Дата сообщения: 01.12.2009 16:48
All

помогите решить следующую задачу:
необходимо раз в месяц отправлять письмо на определенный адрес с определенным текстом который содержит число которое долно быть ежемесячно увеличено на рандомное значение от 150 до 200.
Автор: 01MDM
Дата сообщения: 01.12.2009 17:42
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
Автор: FGHGJGJSD22
Дата сообщения: 01.12.2009 19:53
01MDM

Если не трудно разжуйте тупому...

sed-4.2-1-setup установил...
что дальше хз... запукаю код пишет сед не является командой и т.д...


вообщем если будет желание напишите пожалуйста код для вырезания из
файла 1.txt (он лежит на диске С )
чтоб из него удалялись последние 3 строки...
и может еще че установить нужно ?

заранее благодарен...
сам не сделаю...вся надежда на вас...
Автор: 01MDM
Дата сообщения: 01.12.2009 21:30
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
Автор: FGHGJGJSD22
Дата сообщения: 01.12.2009 22:49
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 строки удаляются а ВСЕ ! ???
Автор: 01MDM
Дата сообщения: 01.12.2009 23:03
FGHGJGJSD22

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

Код:
set PATH=%PATH%;C:\Program Files\GnuWin32\bin
Автор: Ortios
Дата сообщения: 01.12.2009 23:17
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
Автор: FGHGJGJSD22
Дата сообщения: 01.12.2009 23:32
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 в кавычки (тоесть словосочетание с пробелом)
не помогло...
в чем дело может быть ?
если не трудно проверьте на своем компе и скинте заведоморабочий батник...
а то я с ума сойду)))
Автор: 01MDM
Дата сообщения: 01.12.2009 23:44
FGHGJGJSD22
Так я проверял.. У меня работает, убери, если есть концевые пробелы (это болезнь форума). Попробуй вариант Ortios.

Автор: FGHGJGJSD22
Дата сообщения: 01.12.2009 23:54
01MDM
елки палки - точно - пробелы насованы были)))
- убрал все пошло!
Огромное спасибо !

Еще вопрос - как сэмулировать нажатие клавиши(клавиатуры) батником ?
(погуглил - чет не че не нашел)
Автор: GreG
Дата сообщения: 02.12.2009 08:39
01MDM

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

а как мне это значение передать чтоб оно прибавлялось к предыдущему значению и вставлялось в тело письма
Автор: 01MDM
Дата сообщения: 02.12.2009 09:21
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
Автор: yurkesha
Дата сообщения: 02.12.2009 09:30
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
Автор: GreG
Дата сообщения: 02.12.2009 09:37
01MDM

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

предыдущие значение хранится в текстовом файле, в тексте, как мне на него конкретно указать?или лучше создать отдельный файл с предыдущим значением?
Автор: 01MDM
Дата сообщения: 02.12.2009 09:38
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" письма
Автор: Wilion
Дата сообщения: 02.12.2009 13:34
Как реализовать следующее: в папке <Мои документы> есть папка <Печать>, в ней *.doc файлы. Их необходимо распечатать на принтере и удалить из папки. Информация: ноутбук, XPpro SP2, подключение принтера через USB.
Автор: FGHGJGJSD22
Дата сообщения: 02.12.2009 14:58
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
удалены)

Какой код должен быть для такого батника ?
Автор: 01MDM
Дата сообщения: 02.12.2009 16:36
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
Автор: FGHGJGJSD22
Дата сообщения: 02.12.2009 17:01
01MDM
в том то и дело что не единственный! файл с данными за несколько лет....
поэтому и надо автоматизировать вырезку последних строк по зад времени...
Автор: Ortios
Дата сообщения: 02.12.2009 17:13
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
Автор: 01MDM
Дата сообщения: 02.12.2009 17:35
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"
Автор: FGHGJGJSD22
Дата сообщения: 02.12.2009 18:04
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 удаляется

или с циклами лучше будет...?

сам не сделаю вся надежда на вас...
Автор: Ortios
Дата сообщения: 02.12.2009 18:15
01MDM
Эх, с мануалами по SED туго, я имею ввиду чтобы научиться писать скрипты на SED, используя pattern space и pattern hold. Пока остается в сотый раз перечитывать sed man и regexp man и разбирать примеры которые по крупицам можно нагуглить в инете ну и плюс еще хорошая статья Антона Тарасова - полезные однострочные скрипты SED.
Автор: 01MDM
Дата сообщения: 02.12.2009 19:00
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

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: SAS.Планета (часть 2)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.