2014-12-16 6 views
0
  1. Как получить скрипт ниже, чтобы автоматически прочитать 3 значения, отмеченные символом ???? из файла .txt?
  2. Как мне закодировать это в коде ниже?
  3. Как должен выглядеть файл .txt? Пожалуйста, дайте мне пример

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Dim strFind 
Dim strReplace 
Dim strFolderPath 

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 = ???? 
If strFind = "" Then 
    Wscript.Quit 
End If 

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 ThenWScript.Echo "Error renaming: " & filename.path & "Error: " & Err.Description 
     Err.Clear 
     End If 
    Next 
    Loop 
End Sub 

ответ

1

Самый простой способ будет текстовый файл с 3-мя линиями

foo 
bar 
baz 

, которые можно было бы читать как это:

Set f = objFSO.OpenTextFile("C:\path\to\your.txt") 

strFolderPath = f.ReadLine 
strFind  = f.ReadLine 
strReplace = f.ReadLine 

f.Close 
0

Спасибо вы Ansgar Weichers, который сделал трюк :) Опять же, решение часто намного проще, чем вы думаете ,

Для любой ссылки на другие это код, который я закончил с:

Dim File 
Set File = CreateObject("Scripting.FileSystemObject") 
sScriptDir = File.GetParentFolderName(WScript.ScriptFullName) & "\Variables.ini" 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set f = objFSO.OpenTextFile(sScriptDir) 

Dim strFolderPath 
Dim strFind 
Dim strReplace  

strFolderPath = f.ReadLine 
strFind = f.Readline 
strReplace = f.Readline 


'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 

Файл Variable.ini просто содержит 3 строки со значениями для strFolderPath в строке 1, strFind на линии 2 и strReplace в строке 3.

Снова, спасибо большое :)

+0

либо 'Dim' переменные * до * вы будете использовать их, или не заморачиваться вообще. –

+0

Вы абсолютно правы. Это прошло мимо моих глаз. Обновлено сейчас. Благодаря:) – tnuis

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