PDA

Показать полную графическую версию : [решено] Замена текста из другого файла


Страниц : 1 [2] 3

Iska
26-10-2012, 21:12
ul9, я никак не пойму, почему Вы так упорно хотите получить три действия (запуск + выбор + ввод) вместо двух (выбор + запуск)? Зачем?

ul9
26-10-2012, 21:17
Потому что я свожу всё в один батник. Запустила ярлык и пошёл процесс. Только попутно выбираешь нужные действия. Делать 15 ярлыков совсем не вариант...

Iska
26-10-2012, 21:20
Ну, тогда, раз Вам знаком JScript, напишите себе форму на HTA, в которой уже и будете выбирать, с какими параметрами запускать скрипт.

ul9
26-10-2012, 21:38
Нашла вот таких два батника. Теперь осталось определиться.
@Echo Off

set /p variable=[Viberite tip 1- red 2- green 3- blue 4- black]
if /I %variable%==1 goto red
if /I %variable%==2 goto green
if /I %variable%==3 goto blue
if /I %variable%==4 goto black
goto error

:red
echo ****************************************************
echo red
echo ****************************************************
pause
:green
echo ****************************************************
echo green
echo ****************************************************
pause
:blue
echo ****************************************************
echo blue
echo ****************************************************
pause
:black
echo ****************************************************
echo black
echo ****************************************************
pause

:error
echo error - try again
pause
goto :start
@Echo off

:m1
Echo Выберите программу:
Echo.
Echo 1 - Программа 1
Echo 2 - Программа 2
Echo 3 - Программа 3

echo.
Set /p choice="Ваш выбор: "
if not defined choice goto m1
if "%choice%"=="1" (start 1.exe)
if "%choice%"=="2" (start 2.exe)
if "%choice%"=="3" (start 3.exe)
Echo.
Echo Не правильно сделан выбор задания
Echo.
Echo.
goto m1
pause >nul

Iska
26-10-2012, 22:50
Теперь осталось определиться. »
Примерный вид исполнителя с кнопками на .hta:
<html id="appSampleScriptRunner">
<head>
<meta charset="windows-1251">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<title>Sample Script Runner</title>
<hta:Application
Id = "appSampleScriptRunner"
Icon = "%SystemRoot%\System32\wscript.exe"
ApplicationName = "Sample Script Runner"
Border = "normal"
BorderStyle = "normal"
Caption = "yes"
ContextMenu = "no"
InnerBorder = "yes"
MaximizeButton = "yes"
MinimizeButton = "yes"
Navigable = "no"
Scroll = "auto"
ScrollFlat = "no"
Selection = "no"
ShowInTaskbar = "yes"
SingleInstance = "yes"
SysMenu = "yes"
Version = "1.0"
WindowState = "normal"
/>

<style type="text/css">
body {
font: x-small Verdana, Arial, sans-serif;
color: WindowText;
background-color: ButtonFace;
}
</style>

<script language="VBScript">
Option Explicit

Sub Window_OnLoad
Dim arrValues
Dim elem

Dim objHTMLElement

arrValues = Array( _
"/FolderForScan:""E:\Песочница\0001"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\01\Найти это.txt"" /FileReplaceBy:""E:\Песочница\01\заменить этим.txt""", _
"/FolderForScan:""E:\Песочница\0002"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\02\Найти это.txt"" /FileReplaceBy:""E:\Песочница\02\заменить этим.txt""", _
"/FolderForScan:""E:\Песочница\0003"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\03\Найти это.txt"" /FileReplaceBy:""E:\Песочница\03\заменить этим.txt""" _
)

For Each elem In arrValues
Set objHTMLElement = document.createElement("input")

With objHTMLElement
.type = "button"
.style.textAlign = "left"
.value = "cscript.exe //nologo ""c:\My Scripts\Script.vbs""" & Replace(" " & elem, " /", vbCrLf & vbTab & " /")

.onclick = GetRef("OnClickButtonRunScript")
End With

document.body.appendChild objHTMLElement

Set objHTMLElement = document.createElement("br")
document.body.appendChild objHTMLElement
Next

With window
.resizeTo tagBody.scrollWidth + 25, tagBody.scrollHeight + 32
.moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
End With
End Sub

Sub OnClickButtonRunScript()
With CreateObject("WScript.Shell")
MsgBox Replace(window.event.srcElement.value, vbCrLf & vbTab & " /", " /")
'.Run Replace(window.event.srcElement.value, vbCrLf & vbTab & " /", " /")
End With
End Sub
</script>
</head>

<body id="tagBody" scroll="auto">
</body>

<script language="VBScript">
Option Explicit

</script>
</html>

ul9
26-10-2012, 23:09
Примерный вид исполнителя с кнопками на .hta: »
Ого, а как это использовать? Первый раз такое вижу :)

Iska
26-10-2012, 23:22
Откройте Блокнот. Скопируйте код и вставьте его в Блокнот. Сохраните в файл с расширением «.hta». Сделайте двойной щелчок в Проводнике по созданному файлу.

ul9
26-10-2012, 23:30
Получилось.
Редактировать только тут?
Dim objHTMLElement
arrValues = Array( _
"/FolderForScan:""E:\Песочница\0001"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\01\Найти это.txt"" /FileReplaceBy:""E:\Песочница\01\заменить этим.txt""", _
"/FolderForScan:""E:\Песочница\0002"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\02\Найти это.txt"" /FileReplaceBy:""E:\Песочница\02\заменить этим.txt""", _
"/FolderForScan:""E:\Песочница\0003"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\03\Найти это.txt"" /FileReplaceBy:""E:\Песочница\03\заменить этим.txt""" _
)

А можно выводить не пути, а названия в кнопках(Красный, Зелёный и т.д.)?

А ещё лучше не названия, а просто пустые цветные кнопки (#00FF00, #FFFFFF...)

Iska
27-10-2012, 01:22
Редактировать только тут… »
Да.

А можно выводить не пути, а названия в кнопках(Красный, Зелёный и т.д.)? »
Для данного алгоритма — нет. Тут название фактически является командной строкой для исполнения. Но можно сменить алгоритм.

А ещё лучше не названия, а просто пустые цветные кнопки (#00FF00, #FFFFFF...) »
Пробуйте другой алгоритм:
<html id="appSampleScriptRunner">
<head>
<meta charset="windows-1251">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<title>Sample Script Runner</title>
<hta:Application
Id = "appSampleScriptRunner"
Icon = "%SystemRoot%\System32\wscript.exe"
ApplicationName = "Sample Script Runner"
Border = "normal"
BorderStyle = "normal"
Caption = "yes"
ContextMenu = "no"
InnerBorder = "yes"
MaximizeButton = "yes"
MinimizeButton = "yes"
Navigable = "no"
Scroll = "auto"
ScrollFlat = "no"
Selection = "no"
ShowInTaskbar = "yes"
SingleInstance = "yes"
SysMenu = "yes"
Version = "1.1"
WindowState = "normal"
/>

<style type="text/css">
body {
font: x-small Verdana, Arial, sans-serif;
color: WindowText;
background-color: ButtonFace;
}
</style>

<script language="VBScript">
Option Explicit

Dim objDictionary

'==========================================================================
Sub Window_OnLoad
Dim strKey
Dim objHTMLElement

For Each strKey In objDictionary.Keys
Set objHTMLElement = document.createElement("div")

With objHTMLElement
.id = strKey
.title = Replace(objDictionary.Item(strKey), " /", vbCrLf & " /")

With .style
.textAlign = "left"

.borderWidth = "thick"
.borderStyle = "outset"

.margin = "0.5em"
.padding = "0.5em"

.backgroundColor = strKey
End With

.onclick = GetRef("OnClickButtonRunScript")

.onMouseOut = GetRef("OnMouseOut")
.onMouseOver = GetRef("OnMouseOver")
End With

document.body.appendChild objHTMLElement

objHTMLElement.appendChild document.createTextNode(objDictionary.Item(strKey))
Next

With window
.resizeTo tagBody.scrollWidth + 25, tagBody.scrollHeight + 32
.moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
End With
End Sub
'==========================================================================

'==========================================================================
Sub OnClickButtonRunScript()
With CreateObject("WScript.Shell")
MsgBox objDictionary.Item(window.event.srcElement.id)
'.Run objDictionary.Item(window.event.srcElement.id)
End With
End Sub
'==========================================================================

'==========================================================================
Sub OnMouseOut()
With window.event.srcElement
.style.color = "WindowText"
End With
End Sub
'==========================================================================

'==========================================================================
Sub OnMouseOver()
With window.event.srcElement
.style.color = "Yellow"
End With
End Sub
'==========================================================================

Set objDictionary = CreateObject("Scripting.Dictionary")

With objDictionary
.Add "Red", "cscript.exe //nologo ""c:\My Scripts\Script.vbs"" /FolderForScan:""E:\Песочница\0001"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\01\Найти это.txt"" /FileReplaceBy:""E:\Песочница\01\заменить этим.txt"""
.Add "Green", "cscript.exe //nologo ""c:\My Scripts\Script.vbs"" /FolderForScan:""E:\Песочница\0002"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\02\Найти это.txt"" /FileReplaceBy:""E:\Песочница\02\заменить этим.txt"""
.Add "Blue", "cscript.exe //nologo ""c:\My Scripts\Script.vbs"" /FolderForScan:""E:\Песочница\0003"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\03\Найти это.txt"" /FileReplaceBy:""E:\Песочница\03\заменить этим.txt"""
.Add "SpringGreen", "cscript.exe //nologo ""c:\My Scripts\Script.vbs"" /FolderForScan:""E:\Песочница\0003"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\03\Найти это.txt"" /FileReplaceBy:""E:\Песочница\03\заменить этим.txt"""
.Add "DarkSlateBlue", "cscript.exe //nologo ""c:\My Scripts\Script.vbs"" /FolderForScan:""E:\Песочница\0003"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\03\Найти это.txt"" /FileReplaceBy:""E:\Песочница\03\заменить этим.txt"""
.Add "#CFCFF0", "cscript.exe //nologo ""c:\My Scripts\Script.vbs"" /FolderForScan:""E:\Песочница\0003"" /FileExtension:""htm"" /FileWhatFind:""E:\Песочница\03\Найти это.txt"" /FileReplaceBy:""E:\Песочница\03\заменить этим.txt"""
End With
</script>
</head>

<body id="tagBody" scroll="auto">
</body>
</html>
Как и в предыдущем, для исполнения — закомментировать «MsgBox»:
MsgBox objDictionary.Item(window.event.srcElement.id)
и раскомментировать «.Run»:
'.Run objDictionary.Item(window.event.srcElement.id)

ul9
27-10-2012, 01:43
Ага, спасибо. Мы уже почти приблизились к моей затее :)

Вот так бы было просто замечательно
http://s60.radikal.ru/i168/1210/0f/8207d6951cea.png

Iska
27-10-2012, 02:02
ul9, Вы Windows 8, случайно, не пробовали?

Объясните, как Вы планируете ориентироваться, какую кнопку нажимать — по памяти?

ul9
27-10-2012, 02:09
Объясните, как Вы планируете ориентироваться, какую кнопку нажимать — по памяти? »
По цвету:) Наполнение одинаковое, но дизайн разный. В зависимости от цвета и выбирается скрипт. Поэтому не составит труда сориентироваться.
ul9, Вы Windows 8, случайно, не пробовали? »
Не пробовала. Более того и windows7 и windows vista тоже не пробовала, я до сих пор сижу на XP:) Специфика используемых программ не позволяет перейти на другую windows.

Iska
27-10-2012, 05:26
Не пробовала. »
Странно. Было очень похоже на то.

Ладно. Пробуйте так:
<html id="appSampleScriptRunner">
<head>
<meta charset="windows-1251">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<title>Sample Script Runner</title>
<hta:Application
Id = "appTextReplacer"
Icon = "%SystemRoot%\System32\wscript.exe"
ApplicationName = "Sample Script Runner"
Border = "normal"
BorderStyle = "normal"
Caption = "yes"
ContextMenu = "no"
InnerBorder = "yes"
MaximizeButton = "yes"
MinimizeButton = "yes"
Navigable = "no"
Scroll = "auto"
ScrollFlat = "no"
Selection = "no"
ShowInTaskbar = "yes"
SingleInstance = "yes"
SysMenu = "yes"
Version = "1.1"
WindowState = "normal"
/>

<style type="text/css">
body {
font: x-small Verdana, Arial, sans-serif;
color: WindowText;
background-color: ButtonFace;
}
</style>

<script language="VBScript">
Option Explicit

'==========================================================================
Sub Window_OnLoad
Dim strKey

Dim objHTMLElement_Outer
Dim objHTMLElement

Dim lngColumns
Dim lngColumn

Dim elem

If objFSO.FileExists(strIniFile) Then
lngColumns = Int(Sqr(objDictionary.Count) + 1)
lngColumn = 1

For Each strKey In objDictionary.Keys
If lngColumn = 1 Then
Set objHTMLElement_Outer = document.createElement("div")
End If

Set objHTMLElement = document.createElement("div")

With objHTMLElement
.id = strKey

For Each elem In Array("FolderForScan", "FileExtension", "FileWhatFind", "FileReplaceBy")
.title = .title & elem & ": " & vbTab & objDictionary.Item(strKey).Item(elem) & vbCrLf
Next

With .style
.display = "inline"

.width = window.screen.availWidth \ 8
.height = window.screen.availHeight \ 12

.borderWidth = "thick"
.borderStyle = "outset"

.margin = "0.5em"
.padding = "0.5em"

.backgroundColor = strKey
End With

.onclick = GetRef("OnClickButtonRunScript")
End With

objHTMLElement_Outer.appendChild objHTMLElement

If lngColumn = lngColumns Then
document.body.appendChild objHTMLElement_Outer

lngColumn = 1
Else
lngColumn = lngColumn + 1
End If
Next

document.body.appendChild objHTMLElement_Outer

Set objHTMLElement = document.createElement("textarea")

With objHTMLElement
.id = "ProcessLog"
.rows = "25"
.cols = "80"
.readOnly = "true"
.style.display = "none"
End With

document.body.appendChild objHTMLElement

With window
.resizeTo document.body.scrollWidth + 25, document.body.scrollHeight + 32
.moveTo (.screen.availWidth - document.body.offsetWidth) \ 2, (.screen.availHeight - document.body.offsetHeight) \ 2
End With
End If
End Sub
'==========================================================================

'==========================================================================
Sub OnClickButtonRunScript()
document.getElementById("ProcessLog").value = _
"Folder for scan: " & vbTab & objDictionary.Item(window.event.srcElement.id).Item("FolderForScan") & vbCrLf & _
"File extension: " & vbTab & objDictionary.Item(window.event.srcElement.id).Item("FileExtension") & vbCrLf & _
"File what find: " & vbTab & objDictionary.Item(window.event.srcElement.id).Item("FileWhatFind") & vbCrLf & _
"File replace by: " & vbTab & objDictionary.Item(window.event.srcElement.id).Item("FileReplaceBy") & vbCrLf & vbCrLf

With objFSO.OpenTextFile(objDictionary.Item(window.event.srcElement.id).Item("FileWhatFind"), ForReading)
strWhatFind = .ReadAll()
.Close
End With

If objFSO.GetFile(objDictionary.Item(window.event.srcElement.id).Item("FileReplaceBy")).Size > 0 Then
With objFSO.OpenTextFile(objDictionary.Item(window.event.srcElement.id).Item("FileReplaceBy"), ForReading)
strReplaceBy = .ReadAll()
.Close
End With
Else
strReplaceBy = ""
End If

document.getElementById("ProcessLog").style.display = "block"

With window
.resizeTo document.body.scrollWidth + 25, document.body.scrollHeight + 32
.moveTo (.screen.availWidth - document.body.offsetWidth) \ 2, (.screen.availHeight - document.body.offsetHeight) \ 2
End With

ScanSubFolders objFSO.GetFolder(objDictionary.Item(window.event.srcElement.id).Item("FolderForScan"))
End Sub
'==========================================================================

'==========================================================================
Sub ScanSubFolders(objFolder)
Dim objSubFolder
Dim objFile

Dim strContent

document.getElementById("ProcessLog").value = document.getElementById("ProcessLog").value & "[" & objFolder.Path & "]" & vbCrLf

For Each objFile In objFolder.Files
If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase(objDictionary.Item(window.event.srcElement.id).Item("FileExtension")) Then
document.getElementById("ProcessLog").value = document.getElementById("ProcessLog").value & " " & objFile.Name & vbCrLf

If objFile.Size > 0 Then
With objFSO.OpenTextFile(objFile.Path, ForReading)
strContent = .ReadAll()
.Close
End With

If InStr(1, strContent, strWhatFind, vbTextCompare) > 0 Then
document.getElementById("ProcessLog").value = document.getElementById("ProcessLog").value & " Fragment for replace found" & vbCrLf

With objFSO.OpenTextFile(objFile.Path, ForWriting)
.Write Replace(strContent, strWhatFind, strReplaceBy)
.Close
End With
End If
End If
End If
Next

For Each objSubFolder In objFolder.SubFolders
ScanSubFolders objSubFolder
Next
End Sub
'=============================================================================

Const ForReading = 1
Const ForWriting = 2


Dim objDictionary
Dim objFSO

Dim strIniFile

Dim strLine
Dim strKey

Dim strWhatFind
Dim strReplaceBy


Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.Filesystemobject")

With objFSO
strIniFile = .BuildPath(.GetParentFolderName(Replace(appTextReplacer.commandLine, """", "")), .GetBaseName(appTextReplacer.commandLine) & ".ini")

If .FileExists(strIniFile) Then
With .OpenTextFile(strIniFile, ForReading)
Do Until .AtEndOfStream
strLine = Trim(.ReadLine())

If Len(strLine) > 0 Then
If Left(strLine, 1) = "[" And Right(strLine, 1) = "]" Then
strKey = Mid(strLine, 2, Len(strLine) - 2)
objDictionary.Add strKey, CreateObject("Scripting.Dictionary")
Else
objDictionary.Item(strKey).Add Trim(Split(strLine, "=")(0)), Trim(Split(strLine, "=")(1))
End If
End If
Loop

.Close
End With
Else
MsgBox "Ini file [" & strIniFile & "] not found"

window.close
End If
End With
</script>
</head>

<body scroll="auto">
</body>
</html>
Скрипт больше не нужен. Но понадобится ini-файл настроек, одноимённый hta-файлу. Выглядеть он может примерно так:
[Red]
FolderForScan=E:\Песочница\0191\0001
FileExtension=htm
FileWhatFind=E:\Песочница\0191\Найти это2.txt
FileReplaceBy=E:\Песочница\0191\заменить этим2.txt

[Green]
FolderForScan=E:\Песочница\0002
FileExtension=htm
FileWhatFind=E:\Песочница\02\Найти это.txt
FileReplaceBy=E:\Песочница\02\заменить этим.txt

[Blue]
FolderForScan=E:\Песочница\0003
FileExtension=htm
FileWhatFind=E:\Песочница\03\Найти это.txt
FileReplaceBy=E:\Песочница\03\заменить этим.txt

[SpringGreen]
FolderForScan=E:\Песочница\0003
FileExtension=htm
FileWhatFind=E:\Песочница\03\Найти это.txt
FileReplaceBy=E:\Песочница\03\заменить этим.txt

[DarkSlateBlue]
FolderForScan=E:\Песочница\0003
FileExtension=htm
FileWhatFind=E:\Песочница\03\Найти это.txt
FileReplaceBy=E:\Песочница\03\заменить этим.txt

[#CFCFF0]
FolderForScan=E:\Песочница\0003
FileExtension=htm
FileWhatFind=E:\Песочница\03\Найти это.txt
FileReplaceBy=E:\Песочница\03\заменить этим.txt

[GreenYellow]
FolderForScan=E:\Песочница\0003
FileExtension=htm
FileWhatFind=E:\Песочница\03\Найти это.txt
FileReplaceBy=E:\Песочница\03\заменить этим.txt


Скорее всего, ошибок будет куча.

ul9
27-10-2012, 17:33
Скорее всего, ошибок будет куча. »
Спасибо, у меня всё работает без ошибок. ProcessLog и кнопки я заузила, а вот как сделать уже окно что-то не пойму?

http://s013.radikal.ru/i325/1210/46/2c5d8c5dfe07.png

Iska
27-10-2012, 17:52
ul9, я не представляю как сие сделать для IE6.

ul9
27-10-2012, 18:13
ul9, я не представляю как сие сделать для IE6. »
А у меня установлен IE8 :)
Версия: 8.0.6001.18702

Iska
27-10-2012, 19:26
А у меня установлен IE8
Версия: 8.0.6001.18702 »
А у меня — нет ;).

ul9
27-10-2012, 19:38
Если я правильно поняла, то происходит запуск окна браузера и в нём уже появляются эти кнопки. Нашла вот такую команду
window.resizeTo(500,220)
Только как её применить?

Iska
27-10-2012, 19:49
Только как её применить? »
Найдите в *.hta следующий код:
With window
.resizeTo document.body.scrollWidth + 25, document.body.scrollHeight + 32
.moveTo (.screen.availWidth - document.body.offsetWidth) \ 2, (.screen.availHeight - document.body.offsetHeight) \ 2
End With

и вставьте «.resizeTo(500,220)» отдельной строкой перед «End With». Но это не есть правильно — жёстко задавать размеры при плавающем содержимом.

ul9
27-10-2012, 19:59
Чего-то ошибку пишет:
"Недопустимо использование скобок при вызове процедуры Sub"




© OSzone.net 2001-2012