Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

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

Новый участник


Сообщения: 23
Благодарности: 3

Профиль | Отправить PM | Цитировать


Внимание!


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

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь в написании батника". Это и так понятно Заголовок темы должен быть осмысленным.





Исходный вопрос участника
Всех приветствую.
Задача следующая: смотрим в в каталог (например d:\dir\*.*) и если в нем сущетвуют файлы возраст которых более 40 дней, то отправляем email на указанный адрес.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:17, 01-11-2005

 
D_Master


Сообщения: n/a

Профиль | Цитировать


Добрый вечер.

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

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

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

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

Отправлено: 20:37, 21-12-2008 | #531



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

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

Цитата 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%
Возможно проблема была из за пробела перед символом перенаправления (>)? Хотя у меня и с этим работает.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:28, 21-12-2008 | #532

D_Master


Сообщения: n/a

Профиль | Цитировать


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

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

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

Отправлено: 08:32, 22-12-2008 | #533


Ветеран


Сообщения: 894
Благодарности: 137

Профиль | Отправить PM | Цитировать


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

-------
Я не развожу политику в подписи
ПТН ПНХ


Отправлено: 11:01, 22-12-2008 | #534

D_Master


Сообщения: n/a

Профиль | Цитировать


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

Отправлено: 11:56, 22-12-2008 | #535


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата D_Master:
Объясню, для чего мне это нужно »
Ясно. Ну тогда всё что могу посоветовать, так это использовать не батник для этого, а, к примеру скриптовый язык 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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 22-12-2008 в 15:38.


Отправлено: 15:16, 22-12-2008 | #536


Ветеран


Сообщения: 894
Благодарности: 137

Профиль | Отправить PM | Цитировать


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

-------
Я не развожу политику в подписи
ПТН ПНХ


Отправлено: 15:27, 22-12-2008 | #537

D_Master


Сообщения: n/a

Профиль | Цитировать


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

Отправлено: 17:42, 22-12-2008 | #538


Ветеран


Сообщения: 894
Благодарности: 137

Профиль | Отправить PM | Цитировать


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

-------
Я не развожу политику в подписи
ПТН ПНХ


Отправлено: 18:57, 22-12-2008 | #539

D_Master


Сообщения: n/a

Профиль | Цитировать


Вложения
Тип файла: txt Distr.ini.txt
(29 байт, 7 просмотров)

Прикрепил. Это после обработки скриптом Creat0R'a

Отправлено: 19:25, 22-12-2008 | #540



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] VBS/WSH. Сортировка файлов по дате. rancid Скриптовые языки администрирования Windows 3 23-07-2009 06:38
[решено] Как с помощью CMD(BAT) запустить запароленный sfx архив! ofcoss Автоматическая установка приложений 7 10-07-2009 00:41
CMD/BAT - [решено] Нужна помощь в создании bat-ника для распаковки и переименования файлов/папок Nun-Nun Скриптовые языки администрирования Windows 6 14-05-2009 15:45
Нужна снова ваша помощь в написании интересного скрипта Magnus Вебмастеру 2 09-06-2005 20:26
Нужна помощь в написании скрипта Magnus Вебмастеру 7 06-05-2005 10:53




 
Переход