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

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

Автор: 01MDM
Дата сообщения: 07.12.2007 12:29
SapSat
Разбирает третий столбец

Код:
@echo off
setlocal

set max=0
set min=999

for /f "tokens=3" %%i in (log.txt) do (call:check %%i)

:: Особо не тестировал--------------------------
set /a mid=((max+min)%%2)+((max+min)/2)
::----------------------------------------------------

for /f "tokens=1 delims=:" %%i in ('findstr /N "\<%max%\>" "log.txt"') do call:linemax %%i
for /f "tokens=1 delims=:" %%i in ('findstr /N "\<%min%\>" "log.txt"') do call:linemin %%i
for /f "tokens=1 delims=:" %%i in ('findstr /N "\<%mid%\>" "log.txt"') do call:linemid %%i

echo MAX %max% on lines: %linemax%
echo MID %mid% on lines: %linemid%
echo MIN %min% on lines: %linemin%
goto:eof

:check
if %1 geq %max% set max=%1
if %1 leq %min% set min=%1
goto:eof

:linemax
set "linemax=%linemax% %1"
goto:eof

:linemin
set "linemin=%linemin% %1"
goto:eof

:linemid
set "linemid=%linemid% %1"
Автор: crazy_dead
Дата сообщения: 07.12.2007 12:53
01MDM

Огромное спасибище!
А не подскажешь, где почитать про организацию циклов в батниках и про вот это:
>nul 2>nul &&

ЗЫ
немного неправильно поставил задачку: копирнуть надо не в найденный каталог, как сейчас, а во все его подкаталоги. Это возможно?
Автор: kotLeon
Дата сообщения: 07.12.2007 13:23
Уважаемые участники форума подскажите пожалуста есть ли команда для выхода пользователя из профиля, если есть то как она пишется, и можно ли её использовать по сети.
Спасибо.
Автор: SapSat
Дата сообщения: 07.12.2007 13:45
Ilyansk
Спасибо - немного подправил код - и все заработало как надо!
Все OK!


01MDM
Тоже работает все, кроме linemax и linemin
А что это значит:

set "linemin=%linemin% %1"

?
Автор: vu1tur
Дата сообщения: 07.12.2007 13:46
kotLeon
logoff?
Автор: 01MDM
Дата сообщения: 07.12.2007 13:48
crazy_dead
Копирует во все подпапки

Код:
@echo off
set "Docs=C:\Documents and Settings"
set "file=file.cfg"
set "folder=FolderName"

for /d %%i in ("%Docs%\*") do (
dir "%%i\%folder%" 1>nul 2>&1 && call:_copy "%%i\%folder%"
)
goto:eof

:_copy
for /f "tokens=*" %%i in ('dir /b /s /a:d %1') do copy %file% "%%i"
Автор: kotLeon
Дата сообщения: 07.12.2007 14:03
vu1tur
Возможно ли применить команду logoff по сети для удаленного компа, как написать такую команду?
Спасибо.
Автор: 01MDM
Дата сообщения: 07.12.2007 14:11
SapSat
Последнюю метку исправь с :linemin на :linemid
Должен быть вот такой вывод после выполнения

Код:
MAX 133 on lines: 1 16
MID 124 on lines: 7
MIN 115 on lines: 11
Автор: BasiL
Дата сообщения: 07.12.2007 14:31
Задача - найти в куче текстовых файлов все подстроки, заключенные в двойные кавычки и записать в один файл.
пример исходного файла:

Код: 133 DIALOGEX 0, 0, 222, 132
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STYLE DS_FIXEDSYS | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg"
{
CONTROL "Description:", 65535, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 5, 212, 8
CONTROL "", 1090, EDIT, ES_LEFT | ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 5, 15, 212, 112
}
Автор: ArchangelLite
Дата сообщения: 07.12.2007 15:00
Хочу запретить другому пользователю на своем компе использование папки Games (маленький братик еще, а я не садист .

Пишу в cmd.exe

cacls C:\Games /G Женёк:N - Все правильно и он просит подтверждение и т.д.

Иногда по просьбе родителей, я ее включаю (после того как уроки сделает)., и для этого хочу сделать .bat'ник, но как пропустить подтверждение. (В других командах ключ /q , но здесь не работает).

Автор: SapSat
Дата сообщения: 07.12.2007 15:03
01MDM

Все заработало!
Всему виной опять оказались лишние пробелы в конце строк...
:linemid поправил. Спасибо!

!
Автор: ArchangelLite
Дата сообщения: 07.12.2007 15:06

Цитата:
2) Где почитать про VBS, желательно на русском.


Вот здесь: http://askit.ru/custom/progr_admin/progr_admin_plan.htm

Больше нигде круче не найдешь, поверь...

Добавлено:
BasiL

2) Где почитать про VBS, желательно на русском.

Здесь : http://askit.ru/custom/progr_admin/progr_admin_plan.htm

Больше нигде не найдешь, поверь...
Автор: 01MDM
Дата сообщения: 07.12.2007 16:22
ArchangelLite

echo y | cacls


Добавлено:
BasiL
С некоторыми ограничениями, в строке будет найдено содержимое только первой пары кавычек

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (file.ext) do (
set "str=%%i"
set str=!str:"=Ё!
set str=!str:ЁЁ=!
for /f "tokens=2 delims=Ё" %%i in ("!str!") do echo %%i
)
Автор: king_stiven
Дата сообщения: 07.12.2007 19:29
01MDM
BasiL



Код: @echo off
chcp 1251
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (1.txt) do (
if "%%c"=="{" set proverka=yes
if "%%c"=="}" set proverka=
if defined proverka (
set "str=%%c"
set str=!str:"=Ё!
set str=2!str:ЁЁ=!
call :bu
)
)
goto :eof
:bu
:begin
for /f "delims=Ё tokens=1,2*" %%e in ("!str!") do (
if not "%%f"=="" (
echo %%f>>2.txt
set str=%%g
goto begin
)
)
Автор: 01MDM
Дата сообщения: 07.12.2007 20:25
king_stiven
Я тоже доработал вариант

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (file.ext) do (
set "str=%%i"
set str=!str:"=Ё!
set str=!str:ЁЁ=!
call:pars
)
goto:eof
:pars
set tok=2
:begin
for /f "tokens=%tok% delims=Ё" %%i in ("!str!") do (
echo %%i
set /a tok+=2 && if not .%%i==. goto:begin
)
Автор: king_stiven
Дата сообщения: 07.12.2007 21:22
01MDM

Цитата:
А проверка {} что бы брать контент только внутри этих скобок?

Да. Конечно возможно , что эти скобки многовложенные как в скриптах, но в примере только одна пара скобок.
Автор: BasiL
Дата сообщения: 08.12.2007 11:38
спасибо, вроде все работает! Так и знал, что сначала надо кавычки на что-либо поменять, но не придумал, как...
Да, пара скобок одна, но все нужные строки всегда начинаются с " CONTROL"
Но это уже мелочи.
Единственно, не понял для чего

Цитата:
set str=!str:ЁЁ=!

Убирает двойные ЁЁ? но откуда они там?

и не понятно, зачем добавляется двойка вначале:

Цитата:
set str=2!str:ЁЁ=!

Опечатка?

вариант от 01MDM с обработкой нескольких вхождений в кавычках в одной строке излишен, нужно только первое вхождение.

Автор: king_stiven
Дата сообщения: 08.12.2007 13:17
BasiL

то есть такой такой строчки быть не может?
{
"Description:", 65535, STATIC, SS_LEFT | WS_CHILD |

и нам из следующей строчки нужно только Description: ?

{
CONTROL "Description:", 65535, STATIC, "SS_LEFT | "WS_CHILD |

тогда

@echo off
chcp 1251 > nul
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (1.txt) do (
if "%%c"=="{" set proverka=yes
if "%%c"=="}" set proverka=
if defined proverka (
set "str=%%c"
set str=!str:"=Ё!
set str=!str:ЁЁ=!
for /f "delims=Ё tokens=2" %%e in ("!str!") do echo %%e>>2.txt
)
)
Автор: BasiL
Дата сообщения: 08.12.2007 21:03
king_stiven

Цитата:
то есть такой такой строчки быть не может?

Нет. Дальше голову ломать не надо, я нашел решение своей задачи, спасибо!

Ответьте только на ворпос, зачем было

Цитата:
set str=!str:ЁЁ=!

Только эта строка для меня осталась не пОнятой.

Веррнее, я понимаю, что она удаляет "бывшие" двойные кавычки две подряд, т.е. убирает из строки все вхождения "ЁЁ", но для чего эта обработка была включена я не понял...
Автор: 01MDM
Дата сообщения: 08.12.2007 22:55
BasiL
Если оставить дабл-кавычки, то в цикле будет обрабатываться только одна из них, и в результате получим неверный токен.
Попробуй убрать эту строку, и все станет понятно.
Автор: BasiL
Дата сообщения: 09.12.2007 09:35
01MDM
Да, все понял! Спасибо еще раз!
Автор: Zvyagel
Дата сообщения: 09.12.2007 10:38
Помогите. Срочно нужен батник если реально который бы смотрел какой динамический айпишник на удаленных компах и менял бы его на такойже только статический с указанием маски и шлюза. А то надо изменить айпишиники на 150 компах, а по всем не побегаешь. Если не возможно тогда батник в каком бы указал рабочии станции и айпишиники какие данной станции надо прописать
Автор: BasiL
Дата сообщения: 09.12.2007 11:41
Zvyagel
я думаю, сделать можно.
Если винды WinXP++ то можно посетить статику через netsh, а взять настройки из ipconfig.
Правда, задача усложнится, если языки на машинах разные (рус, англ. и т.д.), ну и еще надо выдирать имя сетевого интерфейса, он нужен для netsh... но тоже можно сделать...
Автор: Zvyagel
Дата сообщения: 09.12.2007 11:44
Да WinXp++ на всех машинах в Стандартах языка у всех стоит Русский.
netsh пробовал только не получается в командной строке прописывал
netsh -r 192.168.0.40 interface ip set address "Подключение по локальной сети" static 192.168.0.200 255.255.255.0 192.168.0.6. В командной строке ошибки не выбило но айпишник на удаленном компе не поменяло
Автор: BasiL
Дата сообщения: 09.12.2007 11:56

Цитата:
netsh -r

что то я в хелпе не вижу такого ключа...
Автор: Zvyagel
Дата сообщения: 09.12.2007 12:00
без этого ключа вообще даже не пытается зайти на удаленный комп. А похожую строчку я нашел на данном форуме
Автор: BasiL
Дата сообщения: 09.12.2007 12:02
я бы сделал батничек для локального запуска и назначил удаенным машинам в виде логон скрипта...
Автор: Zvyagel
Дата сообщения: 09.12.2007 12:06
Скопировать и запустить батник на компах не проблема. Проблема в том что бы этот батник брал динамический адрес машини и прописывал его как статический с указанием маски и шлюза. а 150 батников для каждой машини писать долго. так как придется сначало просканить всю сетку и выбрать адреса каждой машини и под нее клепать батник. Думаю что это почти тоже самое что бегать по всем этим машинам и просто вручную прописывать адреса
Автор: BasiL
Дата сообщения: 09.12.2007 12:08
Нет, я имел ввиду один, универсальный батник.
Сейчас попробую нарисовать...
Автор: Zvyagel
Дата сообщения: 09.12.2007 12:10
Главное что бы он сам определял динамический адрес который присвоенный компу

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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