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

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

Автор: mikolamkn
Дата сообщения: 28.06.2006 12:02
[q][/q]
это конечно вопрос хороший. можно конечно проверить на прямую по наличию папки, т.е.
if exist \путь\ goto B
if not exist \путь\ goto C

а можно проанализировать ветку реестра,
...............
[HKEY_LOCAL_MACHINE\SOFTWARE\НАзвание]

[HKEY_LOCAL_MACHINE\SOFTWARE\название\CBShell]
"ROOTDIR"="c:\\ПУТЬ"
...............................
брал путь и проверял наличие папки
if exist \c:\\ПУТЬ\ goto B
if not exist \c:\\ПУТЬ\ goto C



Добавлено:
[@Echo Off
If Exist install.reg Del install.reg
regedit /ea install.reg {нужная ветка}
If Exist install.reg GoTo :_L1
GoTo :_L2

:_L1
Rem Действия проводимые если ветка реестра существует
GoTo :EOF

:_L2
Rem действия проводимые если ветка реестра не существует
GoTo :EOF


странно но не работает
Автор: KapralBel
Дата сообщения: 28.06.2006 13:15
mikolamkn
Что именно не работает?
Автор: mikolamkn
Дата сообщения: 28.06.2006 13:37
[q][/q]
@Echo off
cls

If Exist install.reg Del install.reg
regedit /ea install.reg {HKEY_LOCAL_MACHINE\SOFTWARE\Quorum}
If exist install.reg goto :B
goto :C

:B
Rem Действия проводимые если ветка реестра существует

for /f "tokens=1,2" %%v in ('date /t') do set d=%%v
for /f "tokens=1" %%u in ('time /t') do set t=%%u
if "%t:~1,1%"==":" set t=0%t%
set day=%d:~0,2%-

rem Отображает ггггммдд-ччсс
set timestr=%d:~6,4%%d:~3,2%%day%%t:~0,2%%t:~3,2%

rem Отображает ггггммдд-1
rem set timestr=%d:~6,4%%d:~3,2%%day%

md c:\quorum\distr\copy\%timestr%

xcopy /E /H /-Y c:\Quorum\Cl_bank\*.* c:\quorum\distr\copy\%timestr%

echo %timestr%
rem Goto ERR

:ERR

Echo

Pause
Goto ERR_1

:ERR_1
cls
Echo


Pause
Goto :end



Rem действия проводимые если ветка реестра не существует

:C
rem \___ Копирование софта на диск System in System ____\

xcopy /E /H/-Y e:\Cl_bank\System\*.* C:\Quorum\Cl_bank\System\*.*

и т.д.
у меня к примеру так. Он не смотрит в реестр, а сразу переходит к :c
Автор: KapralBel
Дата сообщения: 28.06.2006 13:46
mikolamkn

Код: @Echo off
cls

If Exist install.reg Del install.reg
start /wait regedit /ea install.reg {HKEY_LOCAL_MACHINE\SOFTWARE\Quorum}
Автор: igor_andreev
Дата сообщения: 28.06.2006 13:55
{HKEY_LOCAL_MACHINE\SOFTWARE\Quorum} фигурные скобки убрать надо
Автор: mikolamkn
Дата сообщения: 28.06.2006 13:57
тоже к сожалению.

Добавлено:
вот супер. работает.

@echo off
cls
If Exist install.reg Del install.reg
rem regedit /ea install.reg {HKEY_LOCAL_MACHINE\SOFTWARE\........}
start /wait regedit /ea install.reg HKEY_LOCAL_MACHINE\SOFTWARE\......
If exist install.reg goto :B
If not exist install.reg goto :C
:B
Rem Действия проводимые если ветка реестра существует

goto end
:C
Rem действия проводимые если ветка реестра не существует

goto end
:end

ВСЕМ ОГРОМНОЕ СПАСИБО......
А как еще сделать поиск по ветке реестра?
есть вот
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Quorum]

[HKEY_LOCAL_MACHINE\SOFTWARE\Quorum\CBShell]
"ROOTDIR"="c:\\quorum\\cl_bank"
"Transport"="extrnbat.qdr"
"Crypto"="batcrypt.qdr"
и т.д.
он должен найти строку "ROOTDIR"="c:\\quorum\\cl_bank"
и по пути c:\\quorum\\cl_bank пойти проверять наличие папки.
Автор: KapralBel
Дата сообщения: 28.06.2006 14:09
mikolamkn

1. Сохраняй в старом формате REGEDIT4
2. Используй команду FOR для разбора файла по строкам
Автор: VladimirKvach
Дата сообщения: 29.06.2006 05:20
Тут несколько страниц назад было. Так и не добили.


Цитата:
CHCP 1251
start D:\test.xls
start D:\Work\тест.xls
exit

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


Дело в том что если в кавычках, то start считает это заголовком окна. Надо так:

start "" "D:\test.xls"
start "" "D:\Work\тест.xls"
start "" "D:\Новая папка\Тестовый файл.xls"
exit

И никакой CHCP не нужен! Русские буквы в dos-кодировке и все.
Автор: mikolamkn
Дата сообщения: 29.06.2006 08:19
Возможно ли осуществить поиск записи по BDE. Если да, то как?

Добавлено:
Есть задача..
имеется путь.
с:\aaa\ccc\ddd\xxx\cfg.cfg
название xxx постоянно меняется. необходимо определить текущее название папки/

@echo off
chcp 1251
del cfg.cfg
copy c:\aaa\ccc\ddd\xxx\cfg.cfg
rename cfg.cfg cfg1.cfg
for /f "tokens=*" %%a in ('more^<cfg1.cfg') do call :_replace %%a
goto eof
:_replace
set i=%*
echo %i%
set i=%i:C:\=A:\%
rem set i=%i: # = # %
rem set i=%i: # = # %
echo %i%>>cfg.cfg
del cfg1.cfg
copy cfg.cfg с:\aaa\ccc\ccc\ddd\xxx\*.*
goto eof
remdel cfg.cfg
:eof
Автор: Aroun
Дата сообщения: 29.06.2006 14:54
Здрасти!
Вопрос такой возможно ли реализовать следущюю задачу посредством бат файлов?:
Каждые 5минут/час/день с сетевого подключения \\center\tachki\tachka 1(всего их 20) будет архивироваться вся инфа на локальный комп с определенным ай-пи, причем скрипт должен запускаться НЕ на нем.Причем сетевое подключение может быть не доступно в какой-то момент времени, как сделать чттобы скрипт периодически проверял его на доступность?
PЗ.Ы. подключение будет требовать пароль/логин.Все тачки-винда хр сеть-рабочая группа
Автор: mikolamkn
Дата сообщения: 29.06.2006 15:41
позырь на форуме. я видел тут такое.
Автор: uZver
Дата сообщения: 29.06.2006 18:24
Aroun
как я себе это вижу:
- настроить назначенное задание на комп., где будет проходить архивация ( Каждые 5минут/час/день)
- помимо самой архивации в батнике прописать
net use z: \\{имя компа,куда будут сливатся архивы} {password} /USER:{login}
move *.* z:
net use z: /d
Автор: mikolamkn
Дата сообщения: 29.06.2006 20:39
Есть вот такая запись.

@echo off
cls

set /B A=dir /B C:\Quorum\Cl_bank\CRYPT\*.*
echo %A%

copy C:\Quorum\Cl_bank\CRYPT\%A%\CFG.CFG не видит путь, точнее он думает что это

copy C:\Quorum\Cl_bank\CRYPT\CFG.CFG что делать?
Автор: cluster
Дата сообщения: 29.06.2006 21:52
Ребят, такая задача. Есть плагин для Миранды IM (MsgExport) - экспортирует историю в *.txt В начале каждого файла - шапка с инфой контакта в формате:

Код: ------------------------------------------------
History for
User : 111
Protocol : ICQ
UIN : 246281652
FirstName :
LastName :
Age : 0
Gender :
e-mail :
Nick :
City :
State :
Phone :
Homepage :
- About -
Автор: Yuk
Дата сообщения: 29.06.2006 22:19
cluster
Perl устроит? Вот сваял быстренько из заготовки:

Код: use strict;
my $dirname = ".";
my @files;
my $file;
my $uid;
my $uin;

opendir (DIR, $dirname)
    or die "Can't open directory $dirname: $!";
@files = grep { /\.TXT/i && -f "$dirname/$_" } readdir (DIR);

open (OFILE, ">users.lst")
    or die "Cannot create file users.lst - $!\n";
print OFILE "User\tUIN\n";

foreach $file (@files) {
    open IFILE, '<', "$dirname/$file"
        or warn ("Can't open $file, $!\n")
        and next;
    print "$file\n";
    while (<IFILE>) {
        chop;
        if (/User : (\w+)/) {
            $uid=$1;
            next;
        }
        if (/UIN : (\d+)/) {
            $uin=$1;
            print OFILE "$uid\t$uin\n";
            next;
        }
    } # end of while
    close IFILE;
} # end of foreach
close OFILE;
closedir DIR;
print "Press ENTER key to close the output window ...";
my $pause = <STDIN>;
Автор: VladimirKvach
Дата сообщения: 30.06.2006 04:34
Aroun


Цитата:
с сетевого подключения \\center\tachki\tachka 1(всего их 20) будет архивироваться вся инфа на локальный комп с определенным ай-пи, причем скрипт должен запускаться НЕ на нем.Причем сетевое подключение может быть не доступно в какой-то момент времени, как сделать чттобы скрипт периодически проверял его на доступность?


Для себя вывел следуещее правило: Если надо что-то архивировать/копировать с машины, то и скрипт должен быть на этой машине, если что-то надо делать с данными на флешке, то и скрипт должен находиться на этой флешке, если что-то надо делать с файлами из архива, который надо скачивать, то и скрипт должен находиться в этом архиве. Так надежнее, потому что скрипт запустится только при доступности соответствующей машины/флешки, при небитости скачанного архива.
Автор: evle
Дата сообщения: 30.06.2006 07:55
mikolamkn
Комманда
set /B A=dir /B C:\Quorum\Cl_bank\CRYPT\*.*
задаёт переменной "/B A" значение "dir /B C:\Quorum\Cl_bank\CRYPT\*.*" (dir при этом не выполняется).
У меня такое чувство, что ты хотел совсем не этого. Где ты вообще взял эту "/B"?
Совершенно непонятно, что ты хотел получить. Если скопировать один и тот же файл из каждой папки в "C:\Quorum\Cl_bank\CRYPT\", то

Код:
pushd C:\Quorum\Cl_bank\CRYPT\
for /D %%i in (*) do copy "%%i\CFG.CFG" <куда надо>
popd
Автор: cluster
Дата сообщения: 30.06.2006 07:58
Yuk

Цитата:
Perl устроит?

нее, не очень. надо в *.cmd
Автор: evle
Дата сообщения: 30.06.2006 08:33
cluster
Поковырялся немного, получилось следующее:

Код:
@echo off
del res
for %%q in (txt*) do (
    for /f "tokens=2 delims=: skip=1" %%i in ('find "User" %%q') do echo User:%%i >> res
    for /f "tokens=2 delims=: skip=1" %%i in ('find "UIN" %%q') do echo UIN:%%i >> res
)
Автор: mikolamkn
Дата сообщения: 30.06.2006 08:51

Цитата:
[/q][q]


огромное спасибо evle
Автор: uZver
Дата сообщения: 30.06.2006 09:32
evle
про pushd: не подскажите авторизацию поддерживает? не нашел
Автор: mikolamkn
Дата сообщения: 30.06.2006 11:50
строка не работае помогите понять почему?
for /D %%i in (*) do set %i:C:\ЧЧЧЧ\ЧЧЧЧ\crypt\%%i\ььь.тт=A:\ЧЧЧЧ\ЧЧЧЧ\crypt\%%i\ььь.тт%
работает только так

set %i:C:\=A:\%
Автор: VladimirKvach
Дата сообщения: 30.06.2006 13:16
evle


Цитата:
Цитата:Для себя вывел следуещее правило:

Увы, это правило очень часто нельзя выполнить.


Не конкретное утверждение




Цитата:
Цитата:Так надежнее, потому что скрипт запустится только при доступности соответствующей машины/флешки, при небитости скачанного архива.


Это легко проверяется в самом батнике.


1) в случае архивирования данных батник должен быть на этой же машине в основном для скорости
2) в случае автообмена данных через флешку батник должен быть на этой же флешке, чтобы его можно было в если понадобится легко исправить получив флешку, без поездки в другой конец города
3) в случае батника в архиве - это просто удобно. Скачал юзер архив с каким либо обновлением, запустил, стартовал батник, все сделал и самоуничтожился. Опять же каждый раз мы можем менять батник как хотим у себя а не в командировке у получателя.
Автор: cluster
Дата сообщения: 30.06.2006 13:17
evle

Цитата:
Выдаёт нечётных строках юзеров, в чётных - уины. В одну строку с наскока слепить не получилось.

честно говоря, и так сойдёт.. но у меня не получается. если нет файла res, не работает. создаю предварительно res, в результате ничего не обнаруживаю. удаляю строку del res - тоже ничего..
Автор: mikolamkn
Дата сообщения: 30.06.2006 17:04
@echo on
cls
pushd E:\Cl_bank\CRYPT\
for /D %%i in (*) do md a:\crypt\%%i
for /D %%i in (*) do copy /Y "E:\Cl_bank\CRYPT\%%i\CFG.CFG" a:\crypt\%%i\*.*
for /D %%i in (*) do copy /Y "E:\Cl_bank\CRYPT\%%i\secret.key" a:\crypt\%%i\*.*

for /D %%i in (*) do rename a:\crypt\%%i\cfg.cfg cfg1.cfg
for /D %%i in (*) do for /f "tokens=*" %%a in ('more^<a:\crypt\%%i\cfg1.cfg') do call :_replace %%a
goto eof
:_replace
set i=%*
echo %i %
for /D %%i in (*) do set i=%i:C:\quorum\cl_bank\crypt\%%i\secret.key =A:\quorum\cl_bank\crypt\%%i\secret.key % <- не работает. подскажите как?
for /D %%i in (*) do echo %i%>>a:\crypt\%%i\cfg.cfg
rem for /D %%i in (*) do del a:\crypt\%%i\cfg1.cfg
for /D %%i in (*) do copy /Y a:\crypt\%%i\cfg.cfg c:\quorum\cl_bank\crypt\%%i\cfg.cfg
goto eof
popd
:eof
Автор: evle
Дата сообщения: 30.06.2006 17:33
uZver

Цитата:
про pushd: не подскажите авторизацию поддерживает? не нашел

Скорее всего нет.
VladimirKvach
Очень часто компьютер или архив, на (в) котором надо что-то сделать, лицом, пишущим батник, не контролируется. При архивации на флешку иногда неудобно держать батник на флешке, поскольку могут применяться разные флешки. Словом, мысли правильные, но в такой категорической форме ("должен") не всегда работают.
cluster
Если ты не заметил, строчка

Код:
for %%q in (txt*) do (
Автор: kirillmkn
Дата сообщения: 30.06.2006 21:40
<- не работает. подскажите как?
for /D %%i in (*) do echo %i%>>a:\crypt\%%i\cfg.cfg
rem for /D %%i in (*) do del a:\crypt\%%i\cfg1.cfg
for /D %%i in (*) do copy /Y a:\crypt\%%i\cfg.cfg c:\quorum\cl_bank\crypt\%%i\cfg.cfg
goto eof
popd
:eof


в этой строке происходит замена пути( строки) в файле, а точнее буквы с c:\ На a:\

for /D %%i in (*) do set i=%i:C:\quorum\cl_bank\crypt\%%i\secret.key =A:\quorum\cl_bank\crypt\%%i\secret.key %



файл cfg.cfg

c:\
secret.key = c:\quorum\cl_bank\crypt\1111\secret.key

c:\


_________________

c:\
secret.key = A:\quorum\cl_bank\crypt\1111\secret.key

c:\

Автор: cluster
Дата сообщения: 30.06.2006 22:28
evle

Цитата:
у меня файлы лежали в той же папке, что и батник и их надо было как-то отличать). Поменяй на свою

я как бы в каталог с *.txt и кидал этот батник. Немного поправил:

Код: @echo off
if EXIST +results.log del +results.log
for %%q in (*.txt) do (
for /f "tokens=2 delims=: skip=1" %%i in ('find "User" %%q') do echo User:%%i >> +results.log
for /f "tokens=2 delims=: skip=1" %%i in ('find "UIN" %%q') do echo UIN:%%i >> +results.log
for /f "tokens=2 delims=: skip=1" %%i in ('find "Protocol" %%q') do echo --- >> +results.log
)
Автор: evle
Дата сообщения: 01.07.2006 05:35
cluster

Цитата:
я как бы в каталог с *.txt и кидал этот батник.

У меня маска стояла не "*.txt", а "txt*"

Цитата:
батник не понимает файлы с более чем одним словом в имени файла

Кавычки надо было вставлять не в маску, она и так прекрасно работает, а вот команде find они нужны:

Код:
for /f "tokens=2 delims=: skip=1" %%i in ('find "User" "%%q"') do echo User:%%i >> +results.log
Автор: cluster
Дата сообщения: 01.07.2006 10:37
evle

Цитата:
У меня маска стояла не "*.txt", а "txt*"

я знаю! пробовал твой скрипт в оригинале - не получилось. твоя маска работает только в кавычках..

Цитата:
Кавычки надо было вставлять не в маску, она и так прекрасно работает, а вот команде find они нужны:

а вот это не помогает! он спотыкается на имени файла, а не на имени в icq (USER)

Цитата:
Можно попробовать конструкцию:

я это понимаю, но вот не знаю, как дать команду, чтоб скрипт переходил на след. файл.
Работать же не будет, если:

Код: :label1
for %%q in (*.txt) do (
....
for /f "tokens=2 delims=: skip=1" %%i in ('find "Age" %%q') do goto label1

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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