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

Mit Batch Text an bestimmter Stelle in anderer Batch einfügen

Frage Entwicklung Batch & Shell

Mitglied: DarkPassenger

DarkPassenger (Level 1) - Jetzt verbinden

20.01.2012 um 13:55 Uhr, 4926 Aufrufe, 5 Kommentare

Hallo zusammen,

als Ausgangspunkt dient mir folgende Frage: http://www.administrator.de/index.php?content=78739#727013.


ich bin auf diesen Eintrag gestoßen, da ich selbst ein Batch-Script schreiben muß, welches an eine gewisse Position einen bestimmten Text hängt.

Die Version von bastla habe ich genommen und für meine Zwecke etwas angepasst.... dachte auch, es würde funktionieren.

Mein Problem ist allerdings das folgende:

In meinem Fall handelt es sich um Batch-Dateien, die angepasst werden müssen. Lasse ich das Script laufen, wird auch eine Ausgabe mit eingefügtem Text erzeugt, leider werden die Sprungmarken aus der Batch ohne "Doppelpunkt" übernomme.

Also

"text"
:sprungMarke
"text"


liefert


"text"
sprungMarke
"text"

Kann mir jemand sagen, wie ich mein Script anpassen muss? Ich komme einfach nicht drauf.

Wäre für jede Hilfe äußerst dankbar!

Viele Grüße
Mitglied: Biber
20.01.2012 um 15:41 Uhr
Moin Schwarzfahrer,

willkommen im Forum.

Es existieren zwei mitgelieferte FIND-Utilities, mit denen du eine Durchnummerierung aller Zeilen erreichen kannst - FIND.exe und FINDSTR.exe.
bastla verwendete in den o.a. Skript das neuere, etwas facegeliftete namens FindStr.exe mit dieser Syntax, um alle Zeilen inkl. Leerzeilen durchzunummerieren:
[Demo am CMD-Prompt]
REM FindStr-Verwendung in einer ZEILE ...for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%TempTxt%"') ... 
d:\temp>findstr /n $ meineini.ini 
1:[MeineSection] 
2:; eine Kommentarzeile mit ein paar == (Gleichheitszeichen) == 
3:; neuevar=wert 
4:neuevar=wert
--> so wird es verwendet und in der FOR/F-Anweisung die Nummerierung wieder entfernt, allerdings dadurch, dass der ":"/Doppelpunkt als Delimiter verwendet wird.
Da du aber die Doppelpunkte erhalten miusst, weiche auf FIND aus - das bietet den Delimiter "]" für deine Zwecke an.

Leider kann FIND aber nicht nach "$" = alle Zeilen mit CRLF suchen, also suchen wir nach allen Zeilen, die ein Suchwort NICHT enthalten (mit Option /v):
[Demo am CMD-Prompt]
 
d:\temp>find /v /n "blubberlutsch" meineini.ini 
---------- MEINEINI.INI 
[1][MeineSection] 
[2]; eine Kommentarzeile mit ein paar == (Gleichheitszeichen) == 
[3]; neuevar=wert 
[4]neuevar=wert 
 
d:\temp>findstr /v /n "blubberlutsch" meineini.ini 
1:[MeineSection] 
2:; eine Kommentarzeile mit ein paar == (Gleichheitszeichen) == 
3:; neuevar=wert 
4:neuevar=wert 
--> die erste gezeigte FIND-Ausgabe enthält die Zeilennummern eingefasst in "[" und "]".
Die zweite Ausgabe (FindStr) zeigt das entsprechende Ergebnis von FindStr mit Option /v zum Vergleich.

Mit FOR /f "tokens=1* delims=]" %%i.... würdest du die wegbekommen.
Und die überflüssige Zeile "------MEINE.INI" mit einem angehängten "^|Find/V "----"

Demo
d:\temp>for /F "tokens=1* delims=]" %i in ('Find /v /n "blubberlutsch" meineini.ini^|find /v "---"') do @echo %j 
[MeineSection] 
; eine Kommentarzeile mit ein paar == (Gleichheitszeichen) == 
; neuevar=wert 
neuevar=wert
Grüße
Biber
Bitte warten ..
Mitglied: bastla
20.01.2012 um 16:59 Uhr
@Biber
Und die überflussige Zeile "------MEINE.INI" mit einem angehängten "^|Find/V "----"
... oder gleich vermeiden mit
for /F "tokens=1* delims=]" %i in ('Find /v /n "blubberlutsch"^<meineini.ini') do @echo %j
Grüße
bastla

P.S.: Und Du schreibst Deine Batches immer noch ohne Verwendung von "blubberlutsch"?
Bitte warten ..
Mitglied: Biber
21.01.2012 um 01:20 Uhr
[OT]
Moin bastla,

Zitat von bastla:
P.S.: Und Du schreibst Deine Batches immer noch ohne Verwendung von "blubberlutsch"?
Na ja, ich speichere meine Oneliner ja selten als Batch ab, deshalb musste ich die Demo ja mit einer *.ini-Datei vorkaspern..

Schönes Wochenende
Biber
[/OT]
Bitte warten ..
Mitglied: DarkPassenger
21.01.2012 um 17:30 Uhr
Hallo ihr beiden,

@Biber: VIelen Dank für deinen Code... er behebt auf jeden Fall das Problem des Entfernens der Doppelpunkte. Was jetzt leider nicht mehr funktioniert ist das Einfügen eines Textes an eine bestimmte Stelle:


Mit folgendem Code suche ich nach einer bestimmten Stelle in der Datei:

01.
  
02.
for /f "delims=:" %%i in ('findstr /n /i /b /c:"%Mark%" "%TempTxt%"') do set Zeile=%%i


es wird auch die richtige Zeile gefunden: in meinem Fall, Zeile= 178

Anschließend füge ich den Text ein, mit deinem (Biber) angepassten Code:

01.
if %Zeile%==0 goto :Rest 
02.
 
03.
for /F "tokens=1* delims=]" %%i in ('Find /v /n "blubberlutsch" "%TempTxt%"') do  if %%i leq %Zeile% echo. %%j>>%Quelle%  
Schließlich soll der Text an diese Stelle, also ab Zeile 179 eingefügt werden:

01.
for /f "tokens=*" %%A in (<$einzufügenderTxt.txt>) do echo %%A>>%Quelle%
Am Ende soll dann noch der restliche Text nach dem eingefügten Text wieder angefügt werden.

01.
:Rest 
02.
more +%Zeile% "%TempTxt%">>"%Quelle%"
Was ist das Resultat des ganzen?

Der Text wird zwar eingefügt, aber immer ans Ende der Datei... zusätzlich werden ab Zeile 179 alle anderen Zeilen nochmal hintendran gehangen.

Also:

01.
Ursprünglicher Text 800 Zeilen 
02.
 
03.
wird zu 
04.
 
05.
#Ursprünglicher Text+ 
06.
#eingefügter Text+ 
07.
#Text ab Zeile 179
Ich blicke gerade überhaupt nicht mehr durch.. bin mir sicher, dass es nur ne Kleinigkeit ist

Wenn mir einer von euch noch einmal helfen könnte, wäre echt super!

Viele Grüße
Bitte warten ..
Mitglied: bastla
21.01.2012 um 20:26 Uhr
Hallo DarkPassenger!

Wird's eventuell besser, wenn Du
for /f "tokens=1* delims=[]" %%i in ('find /v /n "blubberlutsch"^<"%TempText%"') do if %%i leq %Zeile% >>"%Quelle%" echo.%%j
verwendest (beachte den zweiten Delimiter; die anderen Änderungen sind nur Kosmetik)?
Das Einfügen der neuen Zeile (wenn diese offensichtlich aus einer Datei stammt) würde ich übrigens per
>>"%Quelle%" type $einzufügenderTxt.txt
erledigen.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...