Top-Themen

Aktuelle Themen (A bis Z)

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, 1416 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 ..
Ähnliche Inhalte
Batch & Shell
Textdatei verschlüsseln per Batch
gelöst Frage von Nick2212Batch & Shell22 Kommentare

Hi Leute ich wollte einmal fragen ob es eine Möglichkeit gibt, den Inhalt einer Textdatei per Batch zu verschlüsseln ...

Batch & Shell
Batch Textdatei Spaltenweise auslesen
Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell
Textdateien vergleichen BATCH
gelöst Frage von FeudelFredBatch & Shell2 Kommentare

Moin Moin, ich bin komplett neu im Forum und habe auch keine sonderlich großen Erfahrungen mit Foren. Habe eine ...

Batch & Shell
Doppelpunktgetrennte Textdatei einlesen Batch
gelöst Frage von Fabian-HaasBatch & Shell3 Kommentare

Hallo, ich habe eine Textdatei auf einem Server, die sieht so aus und möchte aus einer bestimmten Zeile das ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...