2014-12-16 3 views
1

Я создал скрипт FindAndReplace.vbs, который просто смотрит папку и находит любую желаемую строку в именах файлов и заменяет эту строку нужной строкой.Как изменить определенный код внутри VBScript с другим VBScript?

Теперь, Что я пытаюсь создать это VBScript (ConfigureFindAndReplace.vbs), который легко настроить следующие 3 вещи в коде FindAndReplace.vbs:

  1. Обзор и выберите папку для просмотра (TargetPath)
  2. Какая строка текста для поиска в именах файлов из файлов в этой папке (strFind)
  3. Какая строка заменить (strReplace)

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

И я хочу, чтобы главный исполняемый скрипт FindAndReplace.vbs автоматически обновлялся КАЖДЫЙ раз запускается ConfigureFindAndReplace.vbs.

Чтобы помочь вам разобраться в этом, введите ссылку на .zip-файл, содержащий оба указанных файла. Это, насколько я могу получить и I've застрял в течение 2-х дней теперь:

https://www.dropbox.com/s/to3r3epf4ffyedb/StackOverFlow.zip?dl=0

Надежда Я объяснил это правильно. Если нет, сообщите мне все, что вам нужно знать.

Заранее спасибо :)

А вот коды из файлов:

ConfigureFindAndReplace.vbs:

Set objFSO = CreateObject("Scripting.FileSystemObject") 

Set objShell = CreateObject ("Shell.Application") 
Set objTFolder = objShell.BrowseForFolder (0, "Select Target Folder", (0)) 
targetPath = objTFolder.Items.Item.Path 

Dim oFSO 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
sScriptDir = oFSO.GetParentFolderName(WScript.ScriptFullName) & "/" 



strFind = InputBox("Add string to find.","String to Find", "") 

If strFind = "" Then 
Wscript.Quit 
End If 

strReplace = InputBox("Add string to replace with.","Replace with", "") 


Dim VarFind 
Dim VarReplace 
Dim VarPath 
    VarFind = strFind 
    VarReplace = strReplace 
    VarPath = targetPath 

Dim WshShell 
Set WshShell = CreateObject("WScript.Shell") 
    WshShell.Run sScriptDir & "FindAndReplace.vbs /strfolderpath:" & VarPath 
    WshShell.Run sScriptDir & "FindAndReplace.vbs /strfind:" & VarPath 
    WshShell.Run sScriptDir & "FindAndReplace.vbs /strreplace:" & VarPath 

FindAndReplace.vbs:

'Written by Terje Borchgrevink Nuis on 15.12.2014 

Set objFSO = CreateObject("Scripting.FileSystemObject") 

Dim strFind 
Dim strReplace 
Dim strFolderPath 

strFolderPath = WScript.Arguments.Named("strfolderpath") 
targetPath = strFolderPath 

'Max number of times to replace string 
strCount = 999 
'Comparison type: 0 = case sensitive, 1 = case insensitive 
strCompare = 1 

If targetPath = "" Then 
Wscript.Quit 
End If 

strFind = WScript.Arguments.Named("strfind") 

If strFind = "" Then 
Wscript.Quit 
End If 

strReplace = WScript.Arguments.Named("strreplace") 


Set objFolder = objFSO.GetFolder(targetPath) 


fileRename objFolder 

Sub fileRename(folder) 
Do 

Wscript.sleep 10000 

'Loop through the files in the folder 
For Each objFile In folder.Files 

filename = objFile.Name 
ext = objFSO.getExtensionName(objFile) 
safename = Left(filename, Len(filename) - Len(ext) - 1) 

strStart = 1 
safename = Replace(safename, strFind,strReplace,strStart,strCount,strCompare) 

safename = trim(safename) 

On Error Resume Next 

'Terminate if filename stop.txt is found 
If filename="STOP.txt" Then 

result = MsgBox ("Are you sure you want to terminate the following VBScript?" & vbNewLine & vbNewLine & "FindAndReplace.vbs", vbOKCancel+vbSystemModal , "Terminate VBScript") 

Select Case result 
Case vbOK 
    WScript.quit 
Case vbCancel 
    MsgBox "FindAndReplace.vbs is still running in the background.",,"Information" 
End Select 
End If 

'Only rename if new name is different to original name 
If filename <> safename & "." & ext Then 


objFSO.MoveFile objFile.Path, objFile.ParentFolder.Path & "\" & safename & "." & ext 
End If 

If Err.Number <> 0 Then 
WScript.Echo "Error renaming: " & filename.path & "Error: " & Err.Description 
Err.Clear 
End If 

Next 

Loop 

End Sub 
+0

«Я хочу, чтобы сценарий был удобным для пользователей без навыков программирования». Извините, нет такой вещи –

ответ

1

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

Вы не знаете этого еще, но то, что вы на самом деле хотите, это для FindAndReplace для чтения этих элементов из файла конфигурации.

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

Как?

Есть текстовый файл с 3-х линий

Target Folder=c:\DataFolder 
String to find=a string 
Replace with=Replace a string with this string 

Тогда в FindAndReplace, прежде чем делать какие-либо работы, вы откроете этот файл и читать в три строки. Разделите линии на знак '='. Левая половина - это настройка, а правая половина - значение.
Math эти до трех переменных в скрипте

If configLineLeft = "Target Folder" then REM Each of these should be case insensitive match 
             REM e.g. lcase(configLineLeft) = lcase("Target Folder") 
    TargetFolder = configLineRight 
else if configLineLeft = "String to find" then 
    FindString = configLineRight 
else if configLineLeft = "Replace with" then 
    ReplaceString = configLineRight 
else 
    REM REPORT A PROBLEM TO THE USER AND EXIT 
    EXIT SUB 
end if 

Вы бы выше в цикле While (пока не конец файла), чтение каждой строки и тестирования увидеть, какие настройки есть.

+0

Двоичный Worrier: здесь не нужно голосование, я открыт для любых предложений :) Как бы вы предложили, чтобы это было сделано? У вас есть решения, которые вы могли бы поделиться со мной? – tnuis

+0

Хммм ... Я попробовал предложенные варианты, но не могу заставить их работать. Нет ли более простого способа сделать это? – tnuis

1

Поскольку я не могу найти VBScript в вашем .Zip, некоторые общие советы. Если вы хотите не-к-быть отредактированы скрипт делать разные вещи

  • Пусть скрипт доступа параметры/аргументы и определения различий путем вызова сценария с различными аргументами: cscript FindAndReplace.vbs "c:\some\folder" "param" "arg"
  • позволяют конфиг доступа сценария (из файла .txt, .ini, .xml, .json, ... из базы данных, из реестра; ...) и используйте сценарий конфигурации для установки этих данных.
  • используйте шаблон/заполнитель файл для генерации (другая версия) сценарий

Я бы начал с th первый подход.

После прочтения вашего редактирования:

Вместо вызова вашего скрипта Trice с плохими аргументами:

WshShell.Run sScriptDir & "FindAndReplace.vbs /strfolderpath:" & VarPath 
WshShell.Run sScriptDir & "FindAndReplace.vbs /strfind:" & VarPath 
WshShell.Run sScriptDir & "FindAndReplace.vbs /strreplace:" & VarPath 

выполнить его один раз с соответствующими аргументами:

WshShell.Run sScriptDir & "FindAndReplace.vbs /strfolderpath:" & VarPath & " /strfind:" & VarFind & "/strreplace:" & VarReplace 

(непроверенный, вы необходимо проверить имена и позаботиться о правильном цитировании; cf here)

+0

Извините неправильно Dropbox Link. Он обновляется сейчас :) – tnuis

Смежные вопросы