Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch zum erstellen von Textdateien von Textvorlage

Frage Entwicklung Batch & Shell

Mitglied: XXXXBitter

XXXXBitter (Level 1) - Jetzt verbinden

28.11.2012 um 09:37 Uhr, 1396 Aufrufe, 1 Kommentar

Hallo,

ich habe mal ein Anliegen an die Batch-Profis hier. Ich bin absolut keiner, bin aber auf der Suche nach einer guten Lösung und habe auch schon versucht über die Suche etwas zu finden, finde aber immer nur ähnliche Vorhaben und die werden teilweise mit sehr unterschiedlichen Varianten gelöst. Also es geht um folgendes:

Ich habe eine (mehrzeilige) Textdatei in der ich ein bestimmtes Wort ersetzen und die Datei anschließend unter einem neuen Namen speichern möchte. Im Prinzip hätte ich sogar gerne zwei Varianten:

1. Eine Batch die eine Benutzeringabe abfragt welche den Inhalt angibt mit dem dieses eine bestimmte Wort ersetzt wird (ich nenne es mal "Ersatzwort"). Der Dateiname ist eigentlich relativ egal, im Prinzip kann es auch die Eingabe als Dateinamen benutzen.

2. Eine zweite schöne Variante wäre noch, wenn man der Batch sagen könnte, dass es eine weitere Textadatei quasi als Eingabedatei benutzt. Diese würde jede Eingabe in einer einzelnen Zeile enthalten, sprich für jede Zeile in dieser Textdatei, würde eine neue Textdatei entstehen, in der dieses "Ersatzwort" durch die Textzeile ersetzt wird.


Ich hoffe das Ganze verständlich beschrieben zu haben und eine schöne Lösung dazu zu erhalten. Ich weiß, dass es sicher mehrere Möglichkeiten gibt sich das so irgendwie hinzubasteln, bin aber auch sehr daran interessiert was mir die Experten hier als die eleganteste Lösung vorschlagen...


Vielen Dank schonmal vorweg
Mitglied: Friemler
28.11.2012, aktualisiert 29.11.2012
Hallo XXXXBitter,

hier mein Vorschlag zur Lösung des Problems:
01.
const ForReading   = 1 
02.
const ForWriting   = 2 
03.
const ForAppending = 8 
04.
 
05.
 
06.
Set colArgsNamed   = WScript.Arguments.Named 
07.
Set colArgsUnnamed = WScript.Arguments.Unnamed 
08.
 
09.
 
10.
If colArgsNamed.Count >= 3 Then 
11.
  If colArgsNamed.Exists("I") Then strInFile          = colArgsNamed("I") 
12.
  If colArgsNamed.Exists("P") Then strPattern         = colArgsNamed("P") 
13.
  If colArgsNamed.Exists("R") Then strReplacement     = colArgsNamed("R") 
14.
  If colArgsNamed.Exists("F") Then strReplacementFile = colArgsNamed("F") 
15.
 
16.
  If strInFile <> "" And strPattern <> "" And (strReplacement <> "" Or strReplacementFile <> "") Then 
17.
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
18.
 
19.
    If objFSO.FileExists(strInFile) Then 
20.
      If strReplacement = "" Then 
21.
        If objFSO.FileExists(strReplacementFile) Then 
22.
          Set objReplacementFile = objFSO.GetFile(strReplacementFile) 
23.
          Set objInStream        = objReplacementFile.OpenAsTextStream(ForReading) 
24.
          strFileContent         = objInStream.ReadAll 
25.
          objInStream.Close 
26.
 
27.
          arrReplacements = Split(strFileContent, vbCrLf) 
28.
 
29.
          If arrReplacements(UBound(arrReplacements)) = "" Then 
30.
            ReDim Preserve arrReplacements(UBound(arrReplacements) - 1) 
31.
          End If 
32.
        End If 
33.
      Else 
34.
        arrReplacements = Array(strReplacement) 
35.
      End If 
36.
 
37.
      If Not IsEmpty(arrReplacements) Then 
38.
        Set objInFile   = objFSO.GetFile(strInFile) 
39.
        Set objInStream = objInFile.OpenAsTextStream(ForReading) 
40.
        strFileContent  = objInStream.ReadAll 
41.
        objInStream.Close 
42.
 
43.
        strInFilePath = objFSO.GetParentFolderName(strInFile) 
44.
        strInFileName = objFSO.GetBaseName(strInFile) 
45.
        strInFileExt  = objFSO.GetExtensionName(strInFile) 
46.
        intCntr       = 1 
47.
 
48.
        For Each strReplacement In arrReplacements 
49.
          'strNewFileContent = Replace(strFileContent, strPattern, strReplacement, 1, -1, vbTextCompare) 
50.
          strNewFileContent = Replace(strFileContent, strPattern, strReplacement, 1, -1, vbBinaryCompare) 
51.
 
52.
          strOutFile = objFSO.BuildPath(strInFilePath, strInFileName + "_" + CStr(intCntr) + "." + strInFileExt) 
53.
 
54.
          Set objOutStream = objFSO.CreateTextFile(strOutFile, True) 
55.
          objOutStream.Write strNewFileContent 
56.
          objOutStream.Close 
57.
 
58.
          intCntr = intCntr + 1 
59.
        Next 
60.
      Else 
61.
        WScript.Echo "Datei " + strReplacementFile + " nicht gefunden." 
62.
      End If 
63.
    Else 
64.
      WScript.Echo "Datei " + strInFile + " nicht gefunden." 
65.
    End If 
66.
  Else 
67.
    WScript.Echo "Fehlende Parameter" 
68.
  End If 
69.
Else 
70.
  WScript.Echo "Fehlende Parameter" 
71.
End If
Aufruf:
cscript /nologo <Scriptname>.vbs /i:<Eingabedatei> /p:<Suchwort> {/r:<Ersetzungswort> | /f:<Datei mit Ersetzungswörtern>}

Von den Parametern /r und /f kann nur einer angegeben werden. Wenn der Parameter /r angegeben wurde, wird ein evtl. gleichzeitig angegebener Parameter /f ignoriert.

Falls Eingabedatei, Suchwort, Ersetzungswort oder Datei mit Ersetzungswörtern Leerzeichen enthält, muss das Element in Anführungszeichen eingeschlossen werden.

Ich habe eine VBScript-Lösung gewählt, weil das Verarbeiten des Inhalts von Textdateien mit Batchscript regelmäßig fehlschlägt. Solche Textdateien enthalten oftmals Zeichen, die vom Batchinterpreter als Steuerzeichen interpretiert werden, was dazu führt, dass ein Batchscript mit Fehlermeldungen abbricht oder verstümmelte Ausgabedateien produziert.

Wenn Du Groß-/Kleinschreibung bei der Suche nach zu ersetzenden Wörtern ignorieren willst, lösche das Apostroph (Kommentarzeichen) am Anfang von Zeile 49 und setze am Anfang von Zeile 50 ein Apostroph oder lösche Zeile 50.

Gruß
Friemler
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Batch & Shell
"Generic" Drucker mit batch - File erstellen (6)

Frage von MrPreesident zum Thema Batch & Shell ...

Batch & Shell
gelöst Textdateien vergleichen BATCH (2)

Frage von FeudelFred zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Ordner erstellen und verschieben (6)

Frage von Fromeonly zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...