2016-08-06 12 views
0

Ich habe ein Verzeichnis von Dateien, die ich durch Schleife durch und verwenden einen Teil ihrer Dateinamen Text in einer Vorlage doc zu ersetzen.VBscript Ersetzen von Text mit einem Teil des Dateinamens

Zum Beispiel ein Dateiname kann ‚NV_AD32_city.dxf‘ sein. Alle Dateien im Verzeichnis folgen dem gleichen Dateinamenmuster von XX_XXXX_string.dxf, wobei zwei Unterstriche verwendet werden.

Ich brauche die Zeichenfolge rechts von den ersten „_“ und links von der erfassen „“ so für dieses Beispiel, das wäre ‚AD32_city‘

Wie kann ich Skript-Capture zu verwenden, die Text der aktiven Datei, um Text in der Vorlage zu ersetzen? Ich denke, ich muss ein Objekt erstellen? Aber was ist das Objekt für die aktuelle Datei aus einem Verzeichnis? +++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

Thx für die Antworten, Jungs. Nach einigen Tagen des Ausprobierens von Code verstehe ich es nicht. Ich verstehe, dass es eingerichtet ist, um den Teil der Zeichenfolge des Dateinamens zu übernehmen, den ich möchte, aber wie sage ich dem Skript, die aktuelle Datei zu verwenden, die ich durchlaufe? Hier ist mein Skript so weit. Ich habe den Code in Zeile 20 unter der Sub ‚GetNewInputs‘

Set fso = CreateObject("Scripting.FileSystemObject") 

Option Explicit 
Dim WritePath : WritePath = "S:\TempFolder\" 
Dim OutFile : OutFile = "VEG_DXF-2-SHP_script-" 
Dim WorkingFile : WorkingFile = GetFileContent(SelectFile()) 
Dim NewState, NewSection, NewArea 
Dim OldState, OldSection, OldArea 

Call GetNewInputs() 
Call GetOldInputs() 

Sub GetNewInputs()  
     NewState = UCase(InputBox("INPUT STATE:", _ 
     "INPUT STATE", "SOCAL")) 

     NewSection = ("Section_" & InputBox("INPUT SECTION NUMBER:", _ 
     "INPUT SECTION", "14")) 

     NewArea = "^[^_]+_(.*)\.dxf$"  
End Sub 

Private Sub GetOldInputs() 
     OldState = "XX" 
     OldSection = "_X" 
     OldArea = "ZZZZ" 
End Sub 

Function SelectFile() 
     SelectFile = vbNullString 
     Dim objShell : Set objShell = WScript.CreateObject("WScript.Shell") 
     Dim strMSHTA : strMSHTA = "mshta.exe ""about:" & "<" & "input  type=file id=FILE>" _ 
     &"<" & "script>FILE.click();new  ActiveXObject('Scripting.FileSystemObject')" _ 
     &".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);" & "<" & "/script>""" 

    SelectFile = objShell.Exec(strMSHTA).StdOut.ReadLine() 

    If SelectFile = vbNullString Then 
      WScript.Echo "No file selected or not a text file." 
      WScript.Quit 
    End If 
End Function 

Private Function GetFileContent(filePath)  
    Dim objFS, objFile, objTS  
    Set objFS = CreateObject("Scripting.FileSystemObject")  
    Set objFile = objFS.GetFile(filePath)  
    Set objTS = objFile.OpenAsTextStream(1, 0)  

    GetFileContent = objTS.Read(objFile.Size)  
    Set objTS = Nothing  
End Function 

For Each FileRefIn fso.GetFolder("S:\SOCAL\Section_14\Veg DXFs\").Files 
    NewFile = WorkingFile 
    NewFile = Replace(NewFile, OldState, NewState) 
    NewFile = Replace(NewFile, OldSection, NewSection) 
    NewFile = Replace(NewFile, OldArea, NewArea) 
    WriteFile NewFile, WritePath & OutFile & ".gms" 
    WScript.Echo NewArea 
Next 

Private Sub WriteFile(strLine,fileName) 
    On Error Resume Next 
    Dim objFSO, objFile 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 

    Do Until IsObject(objFile) 
      Set objFile = objFSO.OpenTextFile(fileName, 8, True) 
    Loop 

    objFile.WriteLine strLine 
    objFile.Close 
End Sub 

Antwort

0

Nun, das ist eigentlich zwei Fragen.

Um Dateien in einem Verzeichnis auflisten, können Sie Filesystem verwenden, wie dieser (nicht getestet)

const strFolderPath = "C:\Temp\Whatever" 
set objFSO = CreateObject("Scripting.FileSystemObject") 
set objFolder = objFSO.GetFolder(strFolderPath) 
set colFiles = objFolder.Files 
for each objFile in colFiles 
    ' Do whatever you want with objFile 
next 

Here's the reference diese Objekte Eigenschaften/Methoden.

Und Teil der Dateinamen zu extrahieren, können Sie einen regulären Ausdruck verwenden.

Here’s some guide wie Sie sie in VBScript verwenden.

Der folgende Ausdruck sollte für Sie arbeiten, wird es den Teil dieser Dateinamen erfassen Sie gefragt:

"^[^_]+_(.*)\.dxf$"

+0

Thx für die Antworten, Leute. Nach einigen Tagen des Ausprobierens von Code verstehe ich es nicht. Ich verstehe, dass es eingerichtet ist, um den Teil der Zeichenfolge des Dateinamens zu nehmen, den ich will, aber wie sage ich dem Skript, das von der aktuellen Datei zu nehmen, die ich durchlaufe? Hier ist mein Skript so weit: – Clutch

0

Wenn Sie den Inhalt der dxf-Dateien bearbeiten müssen, werden Sie brauchen innerhalb der AutoCAD VBA (Visual Basic für Applikationen) Umgebung arbeiten.

Wenn das der Fall ist, müssen Sie mit so etwas wie unten starten:

GetObject("AutoCAD.Application.20") 
CreateObject("AutoCAD.Application.20") 

https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-0225808C-8C91-407B-990C-15AB966FFFA8-htm.html

** Bitte beachten Sie, dass „VBA nicht mehr mit der AutoCAD-Installation verteilt ist; es muss separat heruntergeladen und installiert werden. Der VBA Enabler für Autodesk AutoCAD kann heruntergeladen werden here. "

Verwandte Themen