Войти

Показать полную графическую версию : [архив] Нужна помощь в написании 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

gora
15-12-2008, 15:30
для чего делается вот это?
Код:
Set $MIN=3
Set $MLT=60
Set /A $MIN=%$MIN%*%$MLT% »
Переменная $MIN - это число минут, а переменная $MLT равная 60 - это перевод в секунды, т.к. в команда Ping -n Х 127.0.0.1 выполняется приблизительно Х секунд при Х=>2.
Просто так понятнее задавать значение задержки в минутах в начале скрипта.

flighttothemoon
16-12-2008, 16:16
Код:
Set $IP=192.168.0.10
Set NET=255.255.255.0
Set MAC=1234567890ab

:LOOP
Ping -n 5 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 GoTo LOOP

PowerOff wol -ip %$IP% -subnet %NET% -mac %MAC%


Спасибо большое. Все работает. И еще - нельзя никак работу этого скрипта убрать, то есть чтобы работа не была видна? Скрыть появляющиеся тексты

censored
16-12-2008, 17:36
Можно, возле каждой строки написать >NUL

amel27
17-12-2008, 06:55
так понятнее задавать значение задержки в минутах в начале скрипта. »на самом деле для калибровки - один "пинг" только примерно равен секунде, поиграв с параметром $MLT можно добиться максимального приближения $MIN к реальным минутам :)

Все работает»в скрипте есть противоречие - для проверки сети пингуется хост, который выключен, чтобы потом его включить :) ...поэтому в качестве IP нужно ставить "живой" хост (роутер, модем) из подсети ноутбука, команде PowerOff адрес хоста нужен только для расчета адреса подсети, сам IP для генерации "магического пакета" не используется

Гарин
17-12-2008, 15:00
Ребята подскажите что не так делаю?

Требуется сделать скрипт, который мог бы при запуске подключать сетевой принтер.
Вот нашел описание и под себя переделал-

cscript prncnfg.vbs -g -s имя компа -p имя принтера -u администратор -w pass

Но при запуске пишет "Не удается получить объект SWbeemLocator Ошибка 0x800700005 Отказано в доступе"
Хотя точно пишу правильный админский пароль.

Petya V4sechkin
17-12-2008, 15:07
который мог бы при запуске подключать сетевой принтер
[решено] Не могу добавить сетевой принтер (http://forum.oszone.net/thread-88874.html)

sLiDeR-X
20-12-2008, 11:43
Ребята, сделал батник вот такого содержания:
@echo off
rem Пожалуйста, подождите!
TITLE Џ®¦*«г©бв*, Ї®¤®¦¤ЁвҐ!
echo.
echo.
rem Производится установка
echo. ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
echo. є Џа®Ё§ў®¤Ёвбп *ўв®¬*вЁзҐбЄ®Ґ §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа* є
echo. ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
echo.
echo.

rem количество минут
Set $MIN=1
Set $MLT=6
Set /A $MIN=%$MIN%*%$MLT%
rem ip компьютера
Set $IP=192.168.0.2
:LOOP
echo. Џа®Ё§ў®¤Ё¬ §*Їа®б а*Ў®вл 2 Є®¬ЇмовҐа*
echo.
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 Shutdown -s -t 20 -f -c "Џа®Ёб室Ёв §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа*..."
rem If ErrorLevel 1 "C:\Program Files\Download Master\dmaster.exe"
GoTo LOOP

exit
если ставить вместо выключение запуск программы - он работает. как только ставлю шатдаун - просто ходит по кругу, причем не с метки LOOP а с самого начала батника.
Что не так?

gf100
21-12-2008, 11:52
Ping -n %$MIN% 127.0.0.1 >Nul »
Для начала, результат выполнения этой команды не анализируется...
Ping -n 1 %$IP%
If ErrorLevel 1 »
Видимо, здесь всегда возвращается не 1. Возможно, происходит "вылет" из батника при выполнении команды под If'ом.
просто ходит по кругу, причем не с метки LOOP а с самого начала батника »
Т.е. происходит циклический запуск самого батника.

Creat0R
21-12-2008, 12:06
Что не так? »
Для начала можно ещё вместо shutdown подставить echo и проверить, вызывается ли условие. И ещё, если мне память не изменяет, то ErrorLeve это ещё(?) и переменная, её используют так:

If %ErrorLevel% EQL 1 Shutdown ...

sLiDeR-X
21-12-2008, 13:26
Да я уже разобрался...
Все дело было в том, что имя самого батника было Shutdown.bat
Я имя изменил и все заработало... :)
+ потом маленько доработал...
вот что поллучилось: ShutdownComp.bat
@echo off
rem Пожалуйста, подождите!
TITLE Џ®¦*«г©бв*, Ї®¤®¦¤ЁвҐ!
echo.
echo.
rem Производится установка
echo. ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
echo. є Џа®Ё§ў®¤Ёвбп *ўв®¬*вЁзҐбЄ®Ґ §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа* є
echo. ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
echo.
echo.

rem количество минут
Set $MIN=1
Set $MLT=60
Set /A $MIN=%$MIN%*%$MLT%
rem ip компьютера
Set $IP=192.168.0.2
:LOOP
echo.
echo.
echo. Џа®Ё§ў®¤Ё¬ §*Їа®б а*Ў®вл 2 Є®¬ЇмовҐа*:
echo.
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP% >Nul
If ErrorLevel 1 GoTo SDN
echo. Љ®¬ЇмовҐа а*Ў®в*Ґв
echo. ДДДДДДДДДДДДДДДДДД
GoTo LOOP
:SDN
echo. Љ®¬ЇмовҐа ўлЄ«озҐ*
echo. ДДДДДДДДДДДДДДДДДД
echo.
echo.
echo. Џа®Ёб室Ёв §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа*...
Shutdown -s -t 5 -f
rem If ErrorLevel 1 "C:\Program Files\Download Master\dmaster.exe"

echo.
echo. °°°°°°°°°°°°°°°°°
echo. ЙНННННННННННННН»°
echo. МНД $L!DER ДН№°°°°°°°°°°°°°°°°°°°°°
echo. ИННННННЛНННННННКННННННННННННННННННН»°
echo. МНД AlL RiGhTs ReSeRvEd ДН№°°°°°°°°°
echo. ИНННННННННННННННЛНННННННННННКННННННН»°
echo. є є°
echo. УДДДДДД %date% ДЅ
echo.
echo.

exit

D_Master
21-12-2008, 20:37
Добрый вечер.

Подскажите пожалуйста, как можно убрать пустую строку в файле при перенаправлении команды в файл

например,
результатом команды
echo C:\WINDOWS\system32\notepad.exe >exe.txt

будет:
C:\WINDOWS\system32\notepad.exe



С переносом строки.

Просто берется содержимое файла (а там путь к папке) и записывается в переменную. А с переносом строки не получается папку открыть.

Creat0R
21-12-2008, 23:28
sLiDeR-X
Все дело было в том, что имя самого батника было Shutdown.bat
Да, это довольно частая ошибка писателей батников :) Хотя при обработке было бы лучше чтобы приоритет стоял именно на комманде, ну или на вызове с системной папки как в этом случае.

D_Master
как можно убрать пустую строку в файле при перенаправлении команды в файл »
Я (очень) давно сам подобное спрашивал где то, но мне вроде сказали что средствами одного лишь обработчика ком. строки не обойтись.

Просто берется содержимое файла (а там путь к папке) и записывается в переменную. А с переносом строки не получается папку открыть. »
Следующий тест показывает, что никакого переноса строки в переменную не попадает:

@Echo Off
Echo C:\WINDOWS> exe.txt

For /F %%i In (exe.txt) Do Set Var=%%i

CD %Var%
Echo %Var% (%%Var%%) = %CD% (%%CD%%) ?

Set /P iStart=Start "%Var%" (Y/N)?

If "%iStart%"=="y" Start %Var%
If "%iStart%"=="Y" Start %Var%

Возможно проблема была из за пробела перед символом перенаправления (>)? Хотя у меня и с этим работает.

D_Master
22-12-2008, 08:32
Следующий тест показывает, что никакого переноса строки в переменную не попадает: »
Извиняюсь, немного неточно выразился. Объясню, для чего мне это нужно:
1. Есть самописный скрипт, предназначенный для пре- и пост-обработки дистрибутива (с использованием набора обновлений).
2. В этом скрипте копируется дистрибутив, добавляются кое-какие файлы, кое-какие удаляются. Потом берется адрес папки (где сидит готовый к апдейт-паку дистрибутив) и пишется в файл distr.ini (апдейт-пака). А скрипт апдейт-пака не хочет использовать адрес + перенос строки в файле distr.ini и пишет, что папка не существует (из-за переноса).

За пример спасибо, но он, к сожалению, в моём случае не подходит...

Теперь, думаю, достаточно понятно объяснил :)

vserd
22-12-2008, 11:01
D_Master,
Есть самописный скрипт, предназначенный для пре- и пост-обработки дистрибутива (с использованием набора обновлений). »
В моем аналогичном команднике:
@echo !TargetDistrib!>%UPdatepackPath%\%UpdatePackIniFile%
И еще вопрос, длинных имен не используешь?

D_Master
22-12-2008, 11:56
В моем аналогичном команднике:
@echo !TargetDistrib!>%UPdatepackPath%\%UpdatePackIniFile% »
Строка-то появляется всё равно...
И еще вопрос, длинных имен не используешь? »
Нет, максимум - 7 символов в имени папки.

Creat0R
22-12-2008, 15:16
Объясню, для чего мне это нужно »
Ясно. Ну тогда всё что могу посоветовать, так это использовать не батник для этого, а, к примеру скриптовый язык AutoIt (http://forum.oszone.net/newpostinthread-98914.html), ну или VBS-ку:


'=================================================================================================== ========
' [CRLF Stripper]
' Скрипт позволяющий удалять символы перевода строки и возврата каретки (vbCRLF) на конце или в начале файла.
'
' Синтаксис: "FileName" [/Flag /rTimes]
'
' * FileName - Полный путь до файла назначение.
' * /Flag - Указывает метод удаления vbCRLF.
' 0 убирает в начале файла, 1 на конце, и -1 в начале и на конце.
' * /rTimes - Указывает число удаления vbCRLF (сколько символов vbCRLF удалять. По умолчанию все).
'
' Пример запуска: Wscript.exe CRLF_Stripper.vbs "C:\File.txt" 1 -1
' * Удалит все заверщающие символы перевода строки в файле C:\File.txt.
'
' Автор: G.Sandler
'=================================================================================================== ========


Const ForReading = 1, ForWriting = 2, ForAppending = 8

QuiteMode = 1

sFilePath = GetParentDir() & "\TextFile.txt"
iRemoveMethod = 1 'Удалять vbCRLF только на конце файла
iRemoveTimes = -1 'Удалять vbCRLF столько раз сколько встретится на конце/в начале файла

'Определяем параметры ком. строки
If WScript.Arguments.Count > 0 Then sFilePath = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then iRemoveMethod = Int(WScript.Arguments(1))
If WScript.Arguments.Count > 2 Then iRemoveTimes = Int(WScript.Arguments(2))

sFileName = Mid(sFilePath, InStrRev(sFilePath, "\", -1, 1)+1)

'=========================================================
On Error Resume Next

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Проверяем существование файла
If Not oFSO.FileExists(sFilePath) Then
sInitDir = ""

If WScript.Arguments.Count > 0 Then
If QuiteMode = 1 Then Wscript.Quit

MsgBox _
"Файл [" & sFileName & "] не существует. Укажите файл...", _
48, "CRLF Stripper - Ошибка"

sInitDir = Left(sFilePath, InStrRev(sFilePath, "\", -1, 1)-1)
If sInitDir = "" Then sInitDir = GetParentDir()
End If

sFilePath = FileOpenDialog("CRLF Stripper - Укажите файл для обработки", sInitDir, _
"Text Files (*.txt)|*.txt|All Files (*.*)|*.*", sFileName)

If sFilePath = -1 Then Wscript.Quit

If Not oFSO.FileExists(sFilePath) Then
MsgBox _
"Указанный вами файл [" & sFileName & "] не существует." & vbCRLF & vbCRLF & "OK ===> EXIT", _
48, "CRLF Stripper - Ошибка"

Wscript.Quit
End If

sFileName = Mid(sFilePath, InStrRev(sFilePath, "\", -1, 1)+1)
End If

'Открываем файл для *Чтения*
Set oTxtFile = oFSO.OpenTextFile(sFilePath, ForReading)

'Читаем файл
sReadFile = oTxtFile.ReadAll

'Закрываем файл
oTxtFile.Close

'Открываем файл для *Записи*
Set oTxtFile = oFSO.OpenTextFile(sFilePath, ForWriting, True)

'Пишем в файл данные (считанные ранее) без символов перевода строки и возврата каретки (в соответствии с параметрами)
iCounter = 0

Select Case iRemoveMethod
Case 0, -1
Do While Left(sReadFile, 2) = vbCRLF
sReadFile = Right(sReadFile, Len(sReadFile)-2)

iCounter = iCounter + 1
If iRemoveTimes <> -1 And iCounter = iRemoveTimes Then Exit Do
Loop
End Select

iCounter = 0

Select Case iRemoveMethod
Case 1, -1
Do While Right(sReadFile, 2) = vbCRLF
sReadFile = Left(sReadFile, Len(sReadFile)-2)

iCounter = iCounter + 1
If iRemoveTimes <> -1 And iCounter = iRemoveTimes Then Exit Do
Loop
End Select

oTxtFile.Write sReadFile

'Закрываем файл
oTxtFile.Close

'Если скрипт был вызван без параметров, выводим сообщение о завершении...
If WScript.Arguments.Count = 0 Or QuiteMode = 0 Then
MsgBox _
"Обработка файла [" & sFileName & "] удачно завершена!", _
64, _
"CRLF Stripper - Сообщение..."
End If

'Функция для получения полного пути родительского каталога
Function GetParentDir()
sPath = WScript.ScriptFullName
GetParentDir = Left(sPath, InStrRev(sPath, "\", -1, 1)-1)
End Function

'Функция для отображения системного диалога выбора файла
Function FileOpenDialog(sTitle, sInitDir, sFilter, sDefaultName)
Set obj = CreateObject("MSComDlg.CommonDialog")
obj.Filter = sFilter
obj.MaxFileSize = 256
obj.DialogTitle = sTitle
obj.FileName = sDefaultName
obj.InitDir= sInitDir

On Error Resume Next
obj.CancelError = True
Err.Clear

obj.ShowOpen

If Err.Number = 32755 Then
'Cancel Pressed
FileOpenDialog = -1
ElseIf Err.Number <> 0 Then
'Other errors
FileOpenDialog = Err.Number
Else
FileOpenDialog = obj.FileName
End If
End Function


В нашем случае использовать можно так:

@Echo Off
Echo C:\WINDOWS> Exe.txt&&Wscript "CRLF_Stripper.vbs" "Exe.txt" 1 -1

vserd
22-12-2008, 15:27
Строка-то появляется всё равно... »
Чем смотришь?
Если в литсере от тотал коммандера в HEX режиме есть завершающие 0D 0A в единственном экземпляре, то все нормально. Если в большем кол-ве то перетряхивай свой скрипт. Где-то дописываешь лишнее.
Посмотри мой батник:
http://forum.oszone.net/attachment.php?attachmentid=5171&d=1185396580
я его в теме по мультибуту выкладывал.

D_Master
22-12-2008, 17:42
Чем смотришь? »
да всем чем можно - простым блокнотом, АкельПад'ом...
или VBS-ку: »
Creat0R, супер!! Спасибо за скрипт!! :)

vserd
22-12-2008, 18:57
D_Master, выложи свой Dist.ini файлом, не содержимым. Чудес не бывает....

D_Master
22-12-2008, 19:25
Прикрепил. Это после обработки скриптом Creat0R'a




© OSzone.net 2001-2012