Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Ответить
 • Просмотры: 9
Аватара пользователя
Гарин

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение Гарин »

Ребята подскажите что не так делаю?



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

Вот нашел описание и под себя переделал-



Код:

Код: Выделить всё

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

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

Хотя точно пишу правильный админский пароль.
Аватара пользователя
Petya V4sechkin

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение Petya V4sechkin »

sLiDeR-X


Цитата:



Все дело было в том, что имя самого батника было Shutdown.bat



Да, это довольно частая ошибка писателей батников Изображение Хотя при обработке было бы лучше чтобы приоритет стоял именно на комманде, ну или на вызове с системной папки как в этом случае.



D_Master


Цитата D_Master:



как можно убрать пустую строку в файле при перенаправлении команды в файл
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Я (очень) давно сам подобное спрашивал где то, но мне вроде сказали что средствами одного лишь обработчика ком. строки не обойтись.




Цитата D_Master:



Просто берется содержимое файла (а там путь к папке) и записывается в переменную. А с переносом строки не получается папку открыть.
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Следующий тест показывает, что никакого переноса строки в переменную не попадает:





Код:

Код: Выделить всё

@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%

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

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение sLiDeR-X »

Цитата Creat0R:



Следующий тест показывает, что никакого переноса строки в переменную не попадает:
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Извиняюсь, немного неточно выразился. Объясню, для чего мне это нужно:

1. Есть самописный скрипт, предназначенный для пре- и пост-обработки дистрибутива (с использованием набора обновлений).

2. В этом скрипте копируется дистрибутив, добавляются кое-какие файлы, кое-какие удаляются. Потом берется адрес папки (где сидит готовый к апдейт-паку дистрибутив) и пишется в файл distr.ini (апдейт-пака). А скрипт апдейт-пака не хочет использовать адрес + перенос строки в файле distr.ini и пишет, что папка не существует (из-за переноса).



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



Теперь, думаю, достаточно понятно объяснил Изображение
Аватара пользователя
gf100

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение gf100 »

D_Master,


Цитата D_Master:



Есть самописный скрипт, предназначенный для пре- и пост-обработки дистрибутива (с использованием набора обновлений).
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




В моем аналогичном команднике:

@echo !TargetDistrib!>%UPdatepackPath%\%UpdatePackIniFile%

И еще вопрос, длинных имен не используешь?
Аватара пользователя
Creat0R

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение Creat0R »

Цитата vserd:



В моем аналогичном команднике:

@echo !TargetDistrib!>%UPdatepackPath%\%UpdatePackIniFile%
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Строка-то появляется всё равно...


Цитата vserd:



И еще вопрос, длинных имен не используешь?
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Нет, максимум - 7 символов в имени папки.
Аватара пользователя
sLiDeR-X

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение sLiDeR-X »

Цитата D_Master:



Объясню, для чего мне это нужно
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Ясно. Ну тогда всё что могу посоветовать, так это использовать не батник для этого, а, к примеру скриптовый язык
AutoIt
, ну или VBS-ку:




CRLF_Stripper.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
Аватара пользователя
Creat0R

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение Creat0R »

Цитата D_Master:



Строка-то появляется всё равно...
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов




Чем смотришь?

Если в литсере от тотал коммандера в HEX режиме есть завершающие 0D 0A в единственном экземпляре, то все нормально. Если в большем кол-ве то перетряхивай свой скрипт. Где-то дописываешь лишнее.

Посмотри мой батник:

http://forum.oszone.net/attachment.p...1&d=1185396580


я его в теме по мультибуту выкладывал.
Аватара пользователя
vserd

Re: Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Сообщение vserd »

D_Master, выложи свой Dist.ini файлом, не содержимым. Чудес не бывает....
Ответить

Вернуться в «Скриптовые языки администрирования Windows»