Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 7

Автор: Kirillhome
Дата сообщения: 19.08.2009 21:10
Прошу помощи, совсем голову сломал.
Если файл с информацией, "поля" разделены табуляцией.

Понимаю, что всё просто:

Код:
for /f "tokens=8,9,10,11 delims=    " %%i in (book.txt) do call :sss "%%i" "%%j" "%%k" "%%l"
Автор: 01MDM
Дата сообщения: 19.08.2009 22:16
Kirillhome
Попробуй преобразовать двойную табуляцию в <tab><fake><tab>:


Код:
for /f "tokens=*" %%i in (book.txt) do call:parse "%%i"
goto:eof

:parse
set "string=%~1"
set "string=%string:<tab><tab>=<tab>fake<tab>%"

for /f "tokens=7-11 delims=<tab>" %%1 in ("%string%") do something with %%1 %%2 %%3 ...
Автор: Dimmonchik
Дата сообщения: 19.08.2009 22:59
Вечер добрый.
Имеем конвертер "ffmpeg.exe", он запускается из батника со строкой
ffmpeg -i "Имя файла" -ar 22050 -ab 56k -f flv -b 128k -s 320x240 -y "Имя файла.flv"
Также имеется возможность сохранить кадр в картинку
ffmpeg -i "Имя файла" -an -ss 15 -r 20 -vframes 1 -s 320x240 -f mjpeg -y "Имя файла.jpg"
Задача состоит в том, чтоб пакетно все avi файлы переконвертировать в flv и сделть к ним снимки. Возможно ли такое? Если да то как это сделать? Заранее спасибо.
Автор: wolf0425
Дата сообщения: 19.08.2009 23:43
sed v4.2 существует в варианте без dll?
Автор: Kirillhome
Дата сообщения: 19.08.2009 23:45
01MDM
Почти помогло, но:
1) во втором for в качестве разделителя стал срабатывать ещё и пробел, а не только знак табуляции :(
2) максимум можно обратиться к 9-му полю (мне нужно 12)

вот пример кода:

Код:
@echo off
chcp 1251 > nul
for /f "tokens=* delims=" %%a in (book.txt) do call :parse %%a
goto :eof


:parse
set "string=%*"
set "string=%string:    =%"
set "string=%string:=1%"
set "string=%string:^"='%"
echo %string%
pause
for /f "tokens=9,10,12 delims=" %%I in ("%string%") do (
echo "%1"
echo "%2"
echo "%3" )
Автор: Alukardd
Дата сообщения: 20.08.2009 02:37
Доброго времени суток.

простите уж если повторяюсь но прочитать больше 600 страниц я не смог + поиск в гугле далеко меня не завел(

в общем суть такова, что надо проверить значение переменной... т.е. число ли это. нужно именно целое число длинна не имеет значения. ( если есть предложения с маской то можно ограничится тогда только 1-4 символа т.е. для масок 9,99,999,9999 )

и 2 проблемка нужно проверить переменную на принадлжность к времени... т.е. удовлетворяет ли она маске HH:MM:SS. если не сложно то с датой аналогично...

Спасибо за внимание.
Автор: Unitaz
Дата сообщения: 20.08.2009 09:48
господа помогите добавить к имени файла имя(без путей) директории в которой он лежит ,изначально в батнике уже есть список имён файлов в директории.
Автор: king_stiven
Дата сообщения: 20.08.2009 09:53
Alukardd

Цитата:
надо проверить значение переменной... т.е. число ли это


Приведи пример чисел, я понял так:
12345
93847650
0938765432
правильно

2738t87
0987,263
234 567
неправильно


Цитата:
то с датой аналогично...


09:12:31 or 2009:12:31 ?
Одну и ту же переменную на три значения надо проверить?
Автор: Alukardd
Дата сообщения: 20.08.2009 10:04

king_stiven

числа нудны такие:
1, 5, 40, 100, 764 вообщем по кол-ву знаков ограничения нет( для простоты можно гораничится 4, больше врядли будет задействовано ), 0 спереди волнует или нет не знаю точно - лучше убрать т.к. были случаи что воспринималось как 16х

дата формата DD.MM.YYYY - проверку существования числа думаю сам накорябую, хотя условия в bat меня напрятают немного...(((
Автор: gale
Дата сообщения: 20.08.2009 10:46
@echo off
for /f %%a in ('fsutil fsinfo drivetype %1') do echo %%a%

На экране отобразится строка текста, если переменной %1 передать параметр "string".
На экране ничего не появится, если переменной %1 передать параметр "string, str"ing или string".
Однако, если с консоли запустить fsutil fsinfo drivetype с любым из перечисленных параметров, то работает.
Автор: alfsoft
Дата сообщения: 20.08.2009 15:23
Здравствуйте! Есть log-файл вида:


Код:
lmstat - Copyright (c) 1989-2007 Macrovision Europe Ltd. and/or Macrovision Corporation. All Rights Reserved.
Flexible License Manager status on Mon 8/10/2009 11:26

[Detecting lmgrd processes...]
License server status: 744@Tri-server
License file(s) on Tri-server: C:\AVEVA\FlexMan4.1\license.lic:

Tri-server: license server UP (MASTER) v11.5

Vendor daemon status (on Tri-server):

cadcentre: UP v11.5
Feature usage info:

Users of PACK-HULL_DESIGN: (Total of 6 licenses issued; Total of 6 licenses in use)

"PACK-HULL_DESIGN" v1.00, vendor: cadcentre
floating license

Tribon 20-13 20-13 (v1.00) (Tri-server/744 7140), start Mon 8/10 10:14
intel VPO-01 VPO-01 (v1.00) (Tri-server/744 3674), start Mon 8/10 10:17
panda 20-23 20-23 (v1.00) (Tri-server/744 3184), start Mon 8/10 10:53
tribon 20-33 20-33 (v1.00) (Tri-server/744 5055), start Mon 8/10 8:24
tribon 20-28 20-28 (v1.00) (Tri-server/744 1948), start Mon 8/10 11:05
tribon 20-21 20-21 (v1.00) (Tri-server/744 9923), start Mon 8/10 8:07

Users of PACK-INITIAL_GEOMETRY: (Total of 1 license issued; Total of 1 license in use)

"PACK-INITIAL_GEOMETRY" v1.00, vendor: cadcentre
floating license

Kazan tribon-02 tribon-02 (v1.00) (Tri-server/744 2558), start Mon 8/10 9:18

Users of PACK-INITIAL_HYDROSTATICS: (Total of 2 licenses issued; Total of 0 licenses in use)

Users of CABLE-DESIGN: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of DESIGN-PLATFORM: (Total of 45 licenses issued; Total of 24 licenses in use)

"DESIGN-PLATFORM" v1.00, vendor: cadcentre
floating license

Kazan tribon-02 tribon-02 (v1) (Tri-server/744 6070), start Mon 8/10 9:32
TRIBON 41-25 41-25 (v1.0) (Tri-server/744 7723), start Mon 8/10 10:48
TRIBON 30-16 30-16 (v1.0) (Tri-server/744 6246), start Mon 8/10 9:57
Tribon 22-07 22-07 (v1.0) (Tri-server/744 459), start Mon 8/10 7:47
Tribon 20-13 20-13 (v1.0) (Tri-server/744 1564), start Mon 8/10 10:14
intel VPO-01 VPO-01 (v1.0) (Tri-server/744 3252), start Mon 8/10 10:17
panda 20-23 20-23 (v1.0) (Tri-server/744 3355), start Mon 8/10 10:53
tribon AM-01 AM-01 (v1.0) (Tri-server/744 4347), start Mon 8/10 10:49
tribon 20-21 20-21 (v1.0) (Tri-server/744 5129), start Mon 8/10 8:07
tribon 42-21 42-21 (v1.0) (Tri-server/744 4163), start Mon 8/10 10:05
tribon 41-16 41-16 (v1.0) (Tri-server/744 10308), start Mon 8/10 7:42
tribon 20-33 20-33 (v1.0) (Tri-server/744 7051), start Mon 8/10 8:24
tribon 22-22 22-22 (v1.0) (Tri-server/744 5250), start Mon 8/10 8:10
tribon 41-03 41-03 (v1.0) (Tri-server/744 7351), start Mon 8/10 10:49
tribon 22-27 22-27 (v1.0) (Tri-server/744 9125), start Mon 8/10 8:11
tribon AM-02 AM-02 (v1.0) (Tri-server/744 7885), start Mon 8/10 10:49
tribon 41-22 41-22 (v1.0) (Tri-server/744 7643), start Mon 8/10 10:51
tribon 50-27 50-27 (v1.0) (Tri-server/744 538), start Mon 8/10 10:49
tribon 22-14 22-14 (v1.0) (Tri-server/744 2851), start Mon 8/10 11:00
tribon 20-28 20-28 (v1.0) (Tri-server/744 5965), start Mon 8/10 11:05
tribon 22-17 22-17 (v1.0) (Tri-server/744 3847), start Mon 8/10 8:02
tribon 42-18 42-18 (v1.0) (Tri-server/744 2172), start Mon 8/10 7:58
tribon 30-09 30-09 (v1.0) (Tri-server/744 6535), start Mon 8/10 7:52
tribon 22-16 22-16 (v1.0) (Tri-server/744 738), start Mon 8/10 7:46

Users of DGN2REV: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of DIAGRAMS: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of DWF-EXPORT: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of FATC: (Total of 9999 licenses issued; Total of 0 licenses in use)

Users of ISODRAW: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of IVS2REV: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of LINKBR: (Total of 9999 licenses issued; Total of 0 licenses in use)

Users of MARINE-DIAGRAMS: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of OUTFITTING: (Total of 12 licenses issued; Total of 12 licenses in use)

"OUTFITTING" v1.00, vendor: cadcentre
floating license

TRIBON 30-16 30-16 (v1.0) (Tri-server/744 6344), start Mon 8/10 9:57
TRIBON 41-25 41-25 (v1.0) (Tri-server/744 4761), start Mon 8/10 10:48
tribon 42-18 42-18 (v1.0) (Tri-server/744 373), start Mon 8/10 7:58
tribon 42-21 42-21 (v1.0) (Tri-server/744 1789), start Mon 8/10 10:05
tribon 30-09 30-09 (v1.0) (Tri-server/744 4530), start Mon 8/10 7:52
tribon AM-01 AM-01 (v1.0) (Tri-server/744 8144), start Mon 8/10 10:49
tribon 41-16 41-16 (v1.0) (Tri-server/744 152), start Mon 8/10 7:42
tribon 41-03 41-03 (v1.0) (Tri-server/744 9227), start Mon 8/10 10:49
tribon 50-27 50-27 (v1.0) (Tri-server/744 1454), start Mon 8/10 10:49
tribon AM-02 AM-02 (v1.0) (Tri-server/744 684), start Mon 8/10 10:49
tribon 41-22 41-22 (v1.0) (Tri-server/744 9520), start Mon 8/10 10:51
tribon 22-14 22-14 (v1.0) (Tri-server/744 8639), start Mon 8/10 11:00

Users of PID-INTEGRATOR: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of PVS2REV: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of REVIEWAPPL: (Total of 12 licenses issued; Total of 0 licenses in use)

Users of ROOM-DESIGN: (Total of 12 licenses issued; Total of 0 licenses in use)


Автор: ZolotnikOV
Дата сообщения: 20.08.2009 15:35
прошу помощи.

есть батник:


Цитата:
:starting
del /q abcd.xxx
del /q 000*.dll
goto starting


он работает по кругу просто тупо удаляя файли с папки где лежит. при етом процес етот идет всегда когда он запушен. его робота грузит процесcор с 15-18% до 60-70%

как бы его оптимизировать чтоб он запускался, но основную функцию (удаление) начинал выполнять только когда файлы появляются в папке.
я думаю этим можно будет снять нагрузку с процесcора. верно?
большое спасибо.
Автор: wolf0425
Дата сообщения: 20.08.2009 15:50

Цитата:
его робота грузит процесcор с 15-18% до 60-70%
как бы его оптимизировать чтоб он запускался, но основную функцию (удаление) начинал выполнять только когда файлы появляются в папке.
надо не проверку обновления папки вставлять, а паузу на цикл - быстро повторяющаяся проверка будет ждать время ничуть не меньше самого удаления.
добавь внутрь цикла
ping -n 2 -w 1000 localhost > nul
это заставит цикл крутиться не чаще чем раз в секунду



Автор: bredonosec
Дата сообщения: 20.08.2009 16:00
вопрос такой, точнее даже два..
1) есть домен, надо закинуть на десктоп всем по файлику. Но! именно тому юзеру, который залогинившись в даный момент. Какую переменную искать и что писать -как-то не придумывается..
2) можно ли как-то дистанционно сертификаты (на конкретный сайт) инсталлить? Или это к каждому ходить и тыкать кнопками?

Добавлено:
ZolotnikOV

Цитата:
но основную функцию (удаление) начинал выполнять только когда файлы появляются в папке.

if not exist %% goto sleep
if exist %% (
del /q abcd.xxx
del /q 000*.dll
)
sleep 1

что-то вроде.. синтаксис неточно помню, но идея - проверка на существование, если нет - сразу в сон, если да - уничтожение и в сон на 1 минуту.
Автор: ZolotnikOV
Дата сообщения: 20.08.2009 16:13

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

а если программа уже начнет использовать dll-ку.
тогда ее невозможно будет удалить? правильно?
может подскажите какой то другой выход?
Автор: bredonosec
Дата сообщения: 20.08.2009 16:28

Цитата:
а если программа уже начнет использовать dll-ку.

а тупо запретить программе запись в папку? или с ошибкой вывалится?
Автор: ZolotnikOV
Дата сообщения: 20.08.2009 16:37
bredonosec

Цитата:
что-то вроде.. синтаксис неточно помню, но идея - проверка на существование, если нет - сразу в сон, если да - уничтожение и в сон на 1 минуту.

что то не работает. напишите что добавить что б как то вЫводило результат. лог какой то писало что ли.
не спорю, идея хорошая.но наверно не для мого случая. так как за минуту прога уже может использовать dll-ку.

wolf0425
а проверка точно так же затратно по ресурсам как и удаление? или может все таки заменить на проверку даставив туда ping -n 2 -w 1000 localhost > nul ?


Добавлено:

Цитата:
а тупо запретить программе запись в папку?

не, она должна записывать файлы, но не все. вернее все кроме некоторых.
может можно запретить как то по маске записываать?
Автор: Alukardd
Дата сообщения: 20.08.2009 16:53
повторю вопрос... мне кажется просто мой пост уже не читается...

в общем суть такова, что надо проверить значение переменной... т.е. число ли это. нужно именно целое число длинна не имеет значения.
числа нужны такие:
1, 5, 40, 100, 764 вообщем по кол-ву знаков ограничения нет( для простоты можно гораничится 4, больше врядли будет задействовано ), 0 спереди волнует или нет не знаю точно - лучше убрать т.к. были случаи что воспринималось как 16х

и 2 проблемка нужно проверить переменную на принадлжность к времени... т.е. удовлетворяет ли она маске HH:MM:SS. если не сложно то с датой аналогично...
дата формата DD.MM.YYYY - проверку существования числа думаю сам накорябую, хотя условия в bat меня напрятают немного...(((
Автор: gale
Дата сообщения: 20.08.2009 17:20
Нужно вырезать из строки кусочек. Если так

set string=aaaaaaaaaaaaaaaaaaaaaaaaaaa
set cut=%string:~2,5%

то работает. Если по другому

set string=aaaaaaaaaaaaaaaaaaaaaaaaaaa
set begin=2
set end=5
set cut=%string:~%begin%,%end%%

то нет.
Автор: bredonosec
Дата сообщения: 20.08.2009 18:17

Цитата:
может можно запретить как то по маске записываать?

да =)
почти =)
создать в блокноте текстовой файл нулевого размера, обозвать его этим именем длл-ки, и выставить ему в атрибутах ридонли =)
Всё, файл в папке есть, второй с тем же именем нельзя, перезаписать этот нельзя - вуяля? )
Автор: ZolotnikOV
Дата сообщения: 20.08.2009 20:48
bredonosec

Цитата:
вуяля? )

оно то так да несовсем((( нужно именно по маске:
abcd.xxx
*.dll

где .xxx расширение конкретного файла, который не должен лежать в папке.прога его ложит, обрабатывает и переименовывает.
а *- имена файлов неизвестны, и могут менятся.
вот такая картина маслом))

очень наадеюсь на помощь и жду от Вас предложений


Автор: HaK1R
Дата сообщения: 21.08.2009 00:15
Alukardd

Цитата:
число ли это
если нет то ошибку выдать?

Цитата:
и 2 проблемка нужно проверить переменную на принадлжность к времени... т.е. удовлетворяет ли она маске HH:MM:SS. если не сложно то с датой аналогично...


тоже ошибку выдать?

Добавлено:
gale

Код: @echo off
setlocal enabledelayedexpansion
set string=aaaaaaaaaaaaaaaaaaaaaaaaaaa
set begin=2
set end=5
set cut=!string:~%begin%,%end%!
echo cut
Автор: Alukardd
Дата сообщения: 21.08.2009 01:38
HaK1R

ну зачем глупые вопросы задавать? не все ли равно что ты там будешь делать ошибку или экран красить, да хоть закрывать прогу... главное ветку условтй разобрать а, что вместо "Оператор 1", "Оператор 2" поставить я придумаю...
важен сам алгоритм отсева шлачного ввода!!!
Автор: wolf0425
Дата сообщения: 21.08.2009 10:05

Цитата:
а если программа уже начнет использовать dll-ку.
тогда ее невозможно будет удалить? правильно?
может подскажите какой то другой выход?
если программа работает и обратилась к dll - то ты эту dll удалить не можешь.
Хотя можешь переименовать, в том числе с переносом в соседний каталог диска.


Добавлено:

Цитата:
а проверка точно так же затратно по ресурсам как и удаление?
по процессору - более затратна чем удаление.
Ну и проверку существования все равно сделает del abcd.xxx перед тем как писать на диск, с проверкой разница только ругнется del или нет, смысла проверять предварительно - мало.
Ты лучше над временем задержки подумай - сейчас она односекундная, оно действительно нужно настолько часто?
Автор: ZolotnikOV
Дата сообщения: 21.08.2009 10:25
wolf0425


Цитата:
Хотя можешь переименовать, в том числе с переносом в соседний каталог диска.
переименование и перенос не вариант. если прога уже обратиться к dll, то крышка)) тогда уже можно и всю папку с прогой удалять)))))


Цитата:
сейчас она односекундная.

ну вот)) а как угадать какую задержку поставить?
одна секунда много или мало?

все таки хотелось бы услышать, можно ли реализовать как то запрет проге на запись по маске. так как удаление?
Автор: wolf0425
Дата сообщения: 21.08.2009 10:28

Цитата:
одна секунда много или мало?
вот цикл прошел, все файлы удалили. Через какое время имеет лично для тебя важность проверять и удалять там заново?
Или ты какой-то антивирус или инсталлятор пытаешься так придавить, который туда что-то распаковывает?
Посмотри с правами какого юзера он запускается и пишет файлы - может можно по правам запретить.
Успеть проверить и удалить в короткий промежуток времени между тем как временный файл заканчивают писать, переименовывают в dll и запускают - батником малореально, это нужен драйвер на уровне ядра, отслеживающий всю работу с файлами.
Автор: ZolotnikOV
Дата сообщения: 21.08.2009 11:11

Цитата:
вот цикл прошел, все файлы удалили. Через какое время имеет лично для тебя важность проверять и удалять там заново?

если бы я знал)). вобще удаление с циклом помагает. а с одной секундой не пробовал. думаю что методом перебора приду к оптимальному решению.

пока оставляем вот такое:
код

Цитата:

:starting
ping -n 2 -w 1000 localhost > nul
del /q abcd.xxx
del /q *.dll
goto starting



500 - это соответственно пол секунды?
Автор: king_stiven
Дата сообщения: 21.08.2009 12:35
Alukardd
ну вот с датой, если выскочит 31.02.2008 , то есть надо учитывать тонкости месяцев, високосных лет?

Добавлено:
а алгоритм примерно такой
for /f "tokens=1,2,3 delims=." %%a in ("%data%") do (
if "%%a" LEQ "00" set not_data=1
if "%%a" GTR "31" set not_data=1
...
if not defined not_data echo %data%
)
Автор: Unitaz
Дата сообщения: 21.08.2009 15:25
%0 возврвщает имя батника ,а как получить имя каталога в котором лежит батник ?
Автор: guru431
Дата сообщения: 21.08.2009 15:46
Есть маленькая задача - переименовать компы в AD.

Есть список с именами компов вида:
имя_компа=новое_имя_компа

Есть батник на переименование:
set ComputerName=
set NewComputerName=
set DomainUserUPN=user
set DomainUserPasswd=password
netdom renamecomputer %ComputerName% /newname:%NewComputerName% /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60

Как сделать цикл, который переименует все компы из списка (ну и желательно напишет лог)?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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