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

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

Автор: Mr_Hat
Дата сообщения: 18.02.2009 20:35
Всем привет!
Нужна ваша помошь в причесывании батника,
по выдергиванию настроек прокси IE из реестра.

Код:
@echo off
regedit.exe -ea %SYSTEMDRIVE%\IEproxy.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections"
regedit.exe -ea %SYSTEMDRIVE%\IEproxy.tmp "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
echo. [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] >>%SYSTEMDRIVE%\IEproxy.reg
find /i "ProxyEnable" %SYSTEMDRIVE%\IEproxy.tmp >>%SYSTEMDRIVE%\IEproxy.reg
find /i "ProxyServer" %SYSTEMDRIVE%\IEproxy.tmp >>%SYSTEMDRIVE%\IEproxy.reg
del /f /q %SYSTEMDRIVE%\IEproxy.tmp
del /f /q %SYSTEMDRIVE%\IEproxy2.reg
Автор: 01MDM
Дата сообщения: 18.02.2009 20:42
morningsun

Наверное виноват пробел в "@ echo off"




Добавлено:


Mr_Hat

Наверное виноват `on` в "@echo on"
Автор: Mr_Hat
Дата сообщения: 18.02.2009 21:05
01MDM

нет не помогло
мусор остался ---------- C:\IEPROXY.TMP
Автор: igor_andreev
Дата сообщения: 18.02.2009 21:37
Mr_Hat

Код:
more %SYSTEMDRIVE%\IEproxy.tmp | find /i "ProxyEnable">>%SYSTEMDRIVE%\IEproxy.reg
more %SYSTEMDRIVE%\IEproxy.tmp | find /i "ProxyServer">>%SYSTEMDRIVE%\IEproxy.reg
Автор: Mr_Hat
Дата сообщения: 18.02.2009 21:47
igor_andreev
+5 ты Гуру !
спасибо.
Автор: morningsun
Дата сообщения: 19.02.2009 09:14
Неа все также из cmd работает а из Explorer а нет
Автор: Dmitriy_Kolesnikov
Дата сообщения: 19.02.2009 11:33
Подскажите, как лучше решить задачу.

Надо проверить, входит ли юзер в заданную группу безопасности и, в зависимости от этого, выполнить ту или иную команду.

Насколько я понимаю, для локальной рабочей группы надо использовать команду
ifmember
С этим я, думаю, разберусь.

Вопрос теперь в проверке с недоменного компьютера, входит ли юзер в доменную группу. Подсказали такое решение:

for /f %%i in ('cmd /c "dsquery user -samid %username% | dsget user -memberof -expand | dsget group -samid"') do (
if %%i==Users echo %%i
)
rem получаем группы пользователя:
rem dsquery user -samid %username% | dsget user -memberof -expand <- DN
rem dsquery user -samid %username% | dsget user -memberof -expand | dsget group -samid <- SAM

Вопрос теперь в том, что на недоменном компе надо сначала (перед выполнением команды dsquery) авторизоваться на контроллере домена, иначе в процессе выполнения скрипта у юзера выскочит окно авторизации.
Как это сделать?
Автор: 01MDM
Дата сообщения: 19.02.2009 14:28
morningsun

Цитата:
Неа все также из cmd работает а из Explorer а нет

А как ты запускаешь из консоли и из эксплорера? И каким должен быть конечный результат? Зачем разные переменные для каждой строчки, если ты все равно записываешь их в другой файл?

Автор: ikif
Дата сообщения: 19.02.2009 18:19

Цитата:
Здравствуйте.
Помогите с написанием Батча, даже не знаю как начать его.
Задача такова:
Нужно , находясь подключеным к интернету, записать ай-пи в файл и сделать релог, после этого надо новый ай-пи сверить с записаным и если они одинаковы , то релог опять.

При следующем запуске бата, ДОБАВЛЯЕМ ай-пи , которий у нас в данный момент к файлу с записаными предыдущими ай-пи. После релога , надо проверить новый ай-пи со всеми ай-пи из файла-списка.

Как отключиться и подключиться к интернета я знаю.

Заранее благодарен.



Цитата:

ikif

Цитата:записать ай-пи в файл

Какой IP?


Цитата:сделать релог

Что такое релог?


Записать IP ,которий у меня на в данный момент.
Релог - имею в виду переподключиться к интернету.
[more]
@ECHO OFF
@Echo Reconnecting ... please wait...
echo.
rasdial "Provaider" /disconnect
@Echo DialUp disconnected, will reconnect in 8 seconds.
echo.
ping 1.1.1.1 -n 1 -w 8000 >NULL
rasdial "Provaider" UserMi MyPassword
exit
[/more]
Это то что есть у меня на данний момент.
Как сделать то что я хочу не знаю.
Помогите пожалуйста.
Автор: K_AHTOH
Дата сообщения: 19.02.2009 19:44
Доброе время суток уважаемые! Помогите решить задачку?

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

Как реализовать такую функцию:
1. Получить доступ к папке (ну это я сделал с помощью NET USE)
2. Получит имя файла который еще не обрабатывался к примеру 20_02_2009.bin (их много с одним расширением но с разным именем сформированы по дате создания)
3. Передать его на обработку внешней программе типа parser.exe Диск(который присвоился в NET USE):\имя папки\20_02_2009.bin
Когда парсер отработает, на локальном диске появиться файл 20_02_2009.log

Так вот как можно определить обрабатывался файл или нет? Файлы формируются на удаленном компьютере раз в сутки.
Файлы на локальном компе желательно удалять после новой обработки. Т.е. если появится файл 21_02_2009.log удалить 20_02_2009.log

Автор: Maza_Faka
Дата сообщения: 20.02.2009 06:56
ikif

Цитата:
Записать IP ,которий у меня на в данный момент.

Дык а если IP-адресов несколько?
Автор: Ilyansk
Дата сообщения: 20.02.2009 07:58
порылся поиском там-сям, чёт не оч.рулит :(
может я "зажрался", но ... много чего делаю батниками.. кол-во обрабатываемой информации растет, и вот пришла пора копрования файлов в десятки-сотни Мб. Батник это конечно делает, но пользователя несколько пугает "застывание" экрана при этом. Возникла мысль вызвать системную процедуру копирования, с ее анимированным окном и прогрессбаром. Но вот, как-то блёкло на эту тему с инфой... это можно ли вообще? может не бат средствами, а VBS или JScript? может rundll какой-то? посоветуйте, плз, куда рыть?
Автор: king_stiven
Дата сообщения: 20.02.2009 08:12
Ilyansk
А xxcopy? Там есть прогресс бар. Ссылки в шапке.
Автор: Ilyansk
Дата сообщения: 20.02.2009 09:15
K_AHTOH

Код: ::@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set "logfile=logfil"
:: logfile - файл, гда хранятся имена обработанных ранее файлов
SET "SEEKIN=путь где искать файлы\*.*"
for %%f in (!SEEKIN!) DO call :chk %%f
goto :eof

:chk
SET "NEW=1"
for /F "tokens=1 delims=;" %%d in ('findstr /L /I /C:"%1" %logfile%') DO call :wrk %1
IF "!NEW!"=="1" (
ECHO FOUND NEW FILE %1
parser %1
if errorlevel 0 ECHO %1 >> %LOGFILE%
)
goto :eof
:wrk
if not "%1"=="" SET "NEW=0"
Автор: K_AHTOH
Дата сообщения: 20.02.2009 10:00
Ilyansk
Спасибо буду пробовать. О результатах отпишусь.

Работает !!! Респект!!! Теперь осталось причесать под свои нужды.
Автор: Pr1nt
Дата сообщения: 20.02.2009 13:58
Здравствуйте.
Помогите пожалуйста со следующей задачей:

Есть скрипт который по порядку вызывает другие батники из текущей папки. Результат их выполнения успешно записывается в соответствующий log-файл. Вызывать их нужно до первой ошибки (т.е. если вызываемый дочерний скрипт отрабатывает с ошибкой, нужно выдать ее и остановить выполнение основного).

Получается что-то вроде:

Код: @echo off
for %%f in (*.cmd) do if not "%%f"=="%~nx0" (
call %%f > %%~nf.log
)
Автор: ikif
Дата сообщения: 20.02.2009 15:35

Цитата:
Maza_Faka
Дык а если IP-адресов несколько?



Спасибо . Потратил 6 часов и решил проблему.
[more]
@echo off
GOTO start
:start
if not exist Spisok.txt @echo off > Spisok.txt
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr "IP Address"') do (
if not defined myip set myip=%%a
)
echo my IP - %myip%
find /i "%myip%" < Spisok.txt >NUL
echo errorlevel %errorlevel% >NUL
IF "%errorlevel%"=="0" (
echo .
echo You need RECONNECT
echo .
PING 1.1.1.1 -n 1 -w1000 >NUL
GOTO start
) ELSE (
echo %TIME% -- %myip% >>Spisok.txt
echo .
echo You have a New IP
echo .
pause
)

[/more]

В RECONNECT записываю код которий делает перезаход в интернет.
Автор: Maza_Faka
Дата сообщения: 21.02.2009 07:15
Pr1nt

Цитата:
Помогите пожалуйста со следующей задачей

Варианты:

1.
При появлении ошибки писать в лог-файл слово ~Error, и после каждого вызова проверять лог-файл на наличие этого слова:

Код:
Find "~Error" log.txt && Exit /B
Автор: ponand
Дата сообщения: 21.02.2009 12:46
Подскажите возможно ли создать постоянную переменную ?
Например %test% со значение 0
При каждом запуске изменять ее значение с сохранением измененного значения?
Примерно так

Код: set "test=%test% + 1"
Автор: Maza_Faka
Дата сообщения: 21.02.2009 14:42
ponand

Цитата:
При каждом запуске изменять ее значение с сохранением измененного значения?

Писать в файл или в реестр, иначе никак.


Цитата:
И чем заменить start вот примерно в таком цикле?

Если нужно дождаться завершения каждой команды, то - ничем.
Автор: ponand
Дата сообщения: 21.02.2009 15:38
Maza_Faka

Цитата:
Писать в файл или в реестр, иначе никак.

a можно по подробнее как записать и как потом присвоить
вот так у меня получилось в файл и из него

Код: rem из файла
set /p test=<test.txt
rem в файл
set /a test=%test%+1
echo %test% >test.txt
Автор: ikif
Дата сообщения: 22.02.2009 01:30
Здравствуйте.
Помогите с проблемой.
Есть папка в которой находятся много папок (около 20), в половине из которых находиться один файл (эти файлы называются одинаково, но их содержимое различно), другая половина папок пустые.
Надо создать новую папку, и в неё перенести все эти файлы по папкам , которые будут называться (папки) 1, 2, 3 , ... , числами в порядке возростания.
После надо удалить оригинальную папку.


Заранее благодарен.

Добавлено:
Здравствуйте.
Помогите с проблемой.
Есть папка в которой находятся много папок (около 20), в половине из которых находиться один файл (эти файлы называются одинаково, но их содержимое различно), другая половина папок пустые.
Надо создать новую папку, и в неё перенести все эти файлы по папкам , которые будут называться (папки) 1, 2, 3 , ... , числами в порядке возростания.
После надо удалить оригинальную папку.


Заранее благодарен.
Автор: Arch1S
Дата сообщения: 22.02.2009 03:06
ponand
в этом деле поможет Команда SETX

Синтаксис для режима реестра имеет вид:
SETX переменная -К корневой_ключ\ключ\ . . . \переменная [-М]

Синтаксис для файлового режима имеет вид:
SETX переменная -F имя_файла {-A x,y|-R x,y "строка"} [-D d] [-X] [-М]
Автор: Maza_Faka
Дата сообщения: 22.02.2009 05:55
ikif

Цитата:
Помогите с проблемой

Попробуй так:

Код:
@Echo Off

Set SourceDir=c:\MyFolder
Set DestDir=C:\
Set Prefix=0

For /R %SourceDir% %%A In (*.*) Do Call :_MoveProc "%%A"
GoTo :EOF

:_MoveProc
Set /A Prefix+=1
MD %DestDir%%Prefix%>Nul 2>&1
Move %1 %DestDir%%Prefix%
Автор: ikif
Дата сообщения: 22.02.2009 19:59
Maza_Faka

Цитата:
Код:
@Echo Off

Set SourceDir=c:\MyFolder
Set DestDir=C:\
Set Prefix=0

For /R %SourceDir% %%A In (*.*) Do Call :_MoveProc "%%A"
GoTo :EOF

:_MoveProc
Set /A Prefix+=1
MD %DestDir%%Prefix%>Nul 2>&1
Move %1 %DestDir%%Prefix%


Спасибо большое, работает.
Не понятно только роль DestDir , так как при изменении , кримеру на c:\DistDir2, то папки всё равно создаются на С:\ и имеют название DistDir21, DistDir22, DistDir2.....


Добавлено:

Цитата:
Спасибо большое, работает.
Не понятно только роль DestDir , так как при изменении , кримеру на c:\DistDir2, то папки всё равно создаются на С:\ и имеют название DistDir21, DistDir22, DistDir2.....


Решено , поставил \ между %DestDir%%Prefix%.

Скажите, пожалуйста, что делает >NUL в нашем случае?

И какая роль у 2>&1 в строчке MD %DestDir%%Prefix%>Nul 2>&1 ?
Автор: ponand
Дата сообщения: 22.02.2009 21:06
ikif

Цитата:
Решено, поставил \ между %DestDir%%Prefix%.

лучше так
set DestDir=C:\DistDir2\
тогда между
%DestDir%%Prefix% ничего ставить не нужно

Цитата:
Скажите, пожалуйста, что делает 2>&1 ?

2>&1 перенаправляет поток вывода ошибок в стандартный поток вывода

Цитата:
Скажите, пожалуйста, что делает >NUL в нашем случае?

все стандартные сообщения отправляем в Nul (никуда)
Автор: ikif
Дата сообщения: 22.02.2009 21:31
Получается, что стандартные ошибки направляем в некуда, а после этого перенаправляет поток вывода ошибок в стандартный поток вывода.

Не очень понимаю , дайте пожалуйста очеведный пример, работы >NUL 2>&1 .
Пробовал создать ошибку (перенести открытый файл), никакой разницы ни с >NUL 2>&1 ,ни без.
Автор: ponand
Дата сообщения: 22.02.2009 23:24
ikif

Цитата:
Пробовал создать ошибку (перенести открытый файл), никакой разницы ни с >NUL 2>&1,ни без.


Код: MD %DestDir%%Prefix%>Nul 2>&1
Автор: Maza_Faka
Дата сообщения: 23.02.2009 06:15
ponand
ikif

Цитата:
Не понятно только роль DestDir , так как при изменении , кримеру на c:\DistDir2, то папки всё равно создаются на С:\ и имеют название DistDir21, DistDir22, DistDir2

Вопрос звучал так:


Цитата:

Надо создать новую папку, и в неё перенести все эти файлы по папкам , которые будут называться (папки) 1, 2, 3 , ... , числами в порядке возростания.


Что конкретно не устраивает?
Автор: Serhiy123
Дата сообщения: 23.02.2009 11:00
Прошу помощи клуба вот в каком вопросе.

Разрабатываю антивирусный скрипт для защиты флешки от autorun-вирусов.
Принцип его действия заключается в следующем: он стирает на флешке вредоносный файл autorun.inf (если он там присутствует), и создает одноименный каталог AUNORUN.INF, внутри которого создает подкаталог с некорректным именем LPT3 - таким образом удалить каталог обычными способами нельзя. Сейчас же появились вирусы, которые, не имея возможности удалить каталог AUNORUN.INF, переименовывают его, после чего записывают таки на флешку свой зараженный файл autorun.inf.

Просто создавать каждый раз заново каталог AUNORUN.INF не имеет смысла - т.к. флешка будет загажена неудаляемыми каталогами с подозрительными именами.

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

У меня этот код выглядит вот так:


Код:
@echo off
for /R %%J in (.) do (
echo %%J | find /i "LPT3" > 1.txt && goto Founded
)

:Founded
set /p NAMEOFDIR=< 1.txt
set NAMEOFDIR=%NAMEOFDIR:~3,-8%
echo %NAMEOFDIR%
del 1.txt
ren %NAMEOFDIR% AUTORUN.INF

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


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