Войти

Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

amel27
07-08-2008, 12:24
SerDIDG, Если такое невозможно, порекомендуйте какой нибудь консольный редактор текста на который можно написать скрипт. »штатного CMD-редактора нет, а обычные команды нужно использовать с оглядкой - чтобы в тексте не встречалось CMD-метасимволов (типа "|")
рекомендации стандартные: SED (http://gnuwin32.sourceforge.net/packages/sed.htm), AWK (http://gnuwin32.sourceforge.net/packages/gawk.htm), про них можно почитать например ТУТ (http://gazette.linux.ru.net/rus/articles/abs-guide/index.html)

ADD: в ресурс-ките NT4 была еще утилита MUNGE, но она просто заменяет (по списку) один текст на другой

Gennie
07-08-2008, 20:08
Люди, не знаю, в какую из имеющихся тем засунуть этот вопрос: модеры, помогите, плз!

Вопрос такой: как в виндоуз задать переменную окружения _из потока_, т.е. как результату отработки какой-нибудь команды
исхитриться присвоить имя и это будет имя переменной окружения???

Нужно буквально следующее. Есть _файл_ (в смысле "не каталог", хотя вообще без разницы) вида drive:\dir1\dir2\xxxxxxUSR.txt
Результат отработки dir /b drive:\dir1\dir2\*USR*чётко выдаст точное имя этого файла на стандартный вывод.
Так вот, хочу присвоить какой-либо переменной окружения значение имени этого файла, определённого командой dir.
В более широком смысле, конечно же, хочется вообще присваивать любой переменной окружения значения, полученные из потока.
Даже в микрософтовском техцентре на это не удалось найти ответ, команда set упорно не желает работать с потоками, мне не
удалось заставить её кушать данные из потока, даже когда она ждёт ввод данных с консоли (с ключом /p).
Please, help.

Petya V4sechkin
07-08-2008, 22:06
Gennie, примерно так:
@Echo Off
SetLocal EnableExtensions

For /F "Delims=" %%I In ('Dir /B drive:\dir1\dir2\*USR* 2^>nul') Do Set N=%%I
Echo %N%

Результат в переменной N.

Gennie
08-08-2008, 02:03
Спасибо, мысль понял, попробую завтра на работе применить. Только в двух вещах не разобрался в вашем ходе мысли:
зачем stderr на нуль перенаправлять, и зачем заменять стандартные разделители на ничего, ведь в результате выполнения
команды dir получится в чистом виде имя файла, вроде без пробелов, и вроде на stderr ничего подаваться не должно в принципе.
Про stderr, если вы этим имеете в виду, что файл может быть не найден и возникнет ошибка, то я его перед выполнением
предполагаемого назначения переменной проверяю на существование конструкцией if not exist drive:\dir1\dir2\*USR* .....
(ну и какие-то действия стоят) -- оно работает. Поможете понять ваше предложение до конца?

ЗЫ: Вот здесь официальное (http://technet2.microsoft.com/windowsserver/ru/library/552ed70a-208d-48c4-8da8-2e27b530eac71049.mspx?mfr=true) описание команды нашёл, типа из первых рук. Редкостное убожество, к сожалению, как с точки зрения русского языка, так и технической грамотности текста, и иллюстрации примерами...

Petya V4sechkin
08-08-2008, 10:10
зачем заменять стандартные разделители на ничего, ведь в результате выполнения
команды dir получится в чистом виде имя файла, вроде без пробелов
Это просто универсальный способ (работает вне зависимости от наличия или отсутствия пробелов в имени).

Про stderr, если вы этим имеете в виду, что файл может быть не найден и возникнет ошибка, то я его перед выполнением
предполагаемого назначения переменной проверяю на существование конструкцией if not exist drive:\dir1\dir2\*USR*
Если так проверяете, можно не перенаправлять.

Gennie
08-08-2008, 10:41
Большое спасибо, оно заработало!!! 8-)

Dimtos
21-08-2008, 21:22
Добрый день! Написал скрипт, проверяющий размер БД на ПК (там где размер >= 200 Мб). БД лежит на C:\Exec\db\exec.gdb. Нужно проверить диапазон ip 10.1.*.161 - 10.1.*.202, где * диапазон от 10 до 255. Всё замечательно, но строчка


FOR %%I IN (%MASK%) DO IF EXIST %%I SET SIZE=%%~zI
всё время возвращает в %SIZE% значение первого ПК (10.1.10.161). Помогите, пожалуйста, найти ошибку или обходной способ решения задачи. Спасибо!


set /a podset =10
set /a ip =161
set fsz=0
set MASK= T:\Exec\db\exec.gdb

:pod1
set ipfull=10.1.%podset%.%ip%
if %ip%==202 goto pod2
if %podset%==255 goto exit
set /a ip =%ip%+1
:back
net use T: /d
Ping -n 3 %IPFULL%
echo pingerrorlevel %errorlevel%
If %errorlevel% geq 1 (Goto REZULT1)

net use T: \\%IPFULL%\c$ pass1 /user:login1
if "%errorlevel%"=="0" (goto weiter)

net use T: \\%IPFULL%\c$ pass2 /user:login2
if "%errorlevel%"=="0" (goto weiter)

net use T: \\%IPFULL%\c$ pass3 /user:login3
if "%errorlevel%"=="0" (goto weiter)

net use T: \\%IPFULL%\c$ pass4 /user:login4
if "%errorlevel%"=="0" (goto weiter)

net use T: \\%IPFULL%\c$ pass5 /user:login5
if "%errorlevel%"=="0" (goto weiter)

:weiter
FOR %%I IN (%MASK%) DO IF EXIST %%I SET SIZE=%%~zI
set /a filesize=(%size%/1024/1024)
if "%filesize%" geq "200" (echo %SIZE% >> execSize.txt)&(echo %IPFULL% >> execSize.txt)&(echo %filesize% >> execSize.txt)&(echo ------- >> execSize.txt)
:REZULT1
goto pod1

:pod2
set /a podset =%podset%+1
set /a ip =161
goto pod1

:exit
pause
exit

Petya V4sechkin
21-08-2008, 21:35
всё время возвращает в %SIZE% значение
Это называется раннее связывание.
Подробнее можете почитать, выполнив:
set /?
Короче, надо вставить в начало батника:
SetLocal EnableExtensions EnableDelayedExpansion
и везде заменить %SIZE% на !SIZE!

Dimtos
21-08-2008, 22:17
Petya V4sechkin, спасибо! Завтра попробую на работе.
UPD: заработало! спасибо ещё раз!

vaska_sv
26-08-2008, 18:58
Подскажите как сделать так чтоб при первой загрузке выскакивало окошко (Введите имя компьютера), и при нажатии кнопки ОК комп перезагружался!!!

ShaddyR
26-08-2008, 19:17
vaska_sv,
msg %username% "Введите имя компьютера"
shutdown -s -f
где-то так... только зачем? В чем основная идея?

vaska_sv
27-08-2008, 10:21
Диск автом. установки Windows создавался для фирмы у которой много филий по стране, по этим филиям мы раздадим диск, но так как у юзеров нет админ прав(сис админы есть только в центральном офисе), надо это окошко.

vaska_sv
27-08-2008, 11:06
ShaddyR

не мог бы ты мне немного по подробнее расписать этот скрипт, оч надо

ShaddyR
27-08-2008, 15:22
У меня глупый вопрос, потому и не хотел задавать его в форуме:

Как прописать скрипт, который запускал бы все файлы с reg форматом с папки?
А здесь редко вопросы задает профессура.. все чаще выходцы из народу.. :)
Перечитай для начала данную тему - я думаю, здесь найдется ответ на твой или похожий вопрос. Если же нет- поможем.

подробнее расписать этот скрипт »
пока нет - не совсем понимаю его назначение. Нужно дать возможность человеку менять имя компьютера? Если диск с автоустановкой системы, убери из фaйла ответов строку с именем компьютера, система запросит его при установке. Хочешь сделать это уже после того, как система поставилась полностью? Оставь краткую инструкцию по том, как сменить имя компьютера и на какое.. уж если этого сделать не может установщик - неча ему вообще доверять установку системы.. ИМХО так..

vaska_sv
27-08-2008, 16:39
ShaddyR,
Я хочу сделать это после того как система стала полностью, краткое описание не поможет потому что у них нет админ прав, юзеры работают под групой опытные пользователи.

Ответ на вопрос (Как прописать скрипт, который запускал бы все файлы с reg форматом с папки? ) я так и не нашел!!!

vaska_sv
28-08-2008, 17:54
Как прописать скрипт, чтоб он запускал все файлы с расширением .reg из этой папки

mutnik
28-08-2008, 18:29
Приветик всем! Я почитал но не нашел ответ на такой вопрос: нужно присвоить переменную, а взять ее нужно из текстового файла например для переменной Т нужно присвоить значение "Вася Пупкин" из файла C:\text.txt

Пол дня ответ ищу :(

Vadikan
29-08-2008, 01:42
mutnik, приведите пример текстового файла, в котором содержится значение переменной.

Petya V4sechkin
29-08-2008, 09:41
нужно присвоить переменную, а взять ее нужно из текстового файла например для переменной Т нужно присвоить значение "Вася Пупкин" из файла C:\text.txt
For /F "Delims=" %%I In (C:\text.txt) Do Set T=%%I
Echo Значение переменной: %T%

чтоб он запускал все файлы с расширением .reg из этой папки
For %%I In (*.reg) Do Start /Wait Regedit /S "%%~I"

mutnik
29-08-2008, 10:07
Vadikan

в текстовом файле много всего написано а мне нужно записать в переменную все что написано после слова "Пупкин"

извените что не так :)

Petya V4sechkin

огроменное спасибо




© OSzone.net 2001-2012