Ordner finden und eine darin enthaltene text-datei ergänzen
Hallo zusammen,
ich habe mich nun durch mehrere Beiträge hier gearbeitet. Bis jetzt habe ich nur nichts gefunden was mir hilft, bzw. ich konnte es mir aus den ganzen "Code-Schnipseln" nichts funktionierendes zusammensetzen.
Mein Anliegen:
Es gibt bei unseren Benutzen auf C:\ in einer Oracle Verzeichnisstruktur einen bestimmten Ordner, in welchem die Datei "tnsnames.ora" (eventuell) geändert werden muß. Ebenso muß eine neue Datei in diesen Ordner neu hinzugefügt werden.
Der Pfad könnte sein:
lauten.
Ich muß immer in den Ordner network\ADMIN
Den finde ich mittels:
und habe in dann in der text datei stehen.
Nun müsste die die Textdatei ausgelesen werden, der Pfad als Variable übernommen.
Der nächste Schritte wäre: Finde in %PfadVariable% die Datei "tnsnames.ora" schau in die datei ob folgender Inhalt schon vorhanden ist:
Inhalt der auf Existenz zu überprüfen wäre---------------
ENDE-----------------------------------------------------
Wenn diese Info nicht drinnen steht, soll sie eingefügt werden. Dabei ist egal WO sie steht. Oben, unten, mitte.
Wenn diese Info schon vorhanden ist, lass alles wie es ist.
Zusätzlich muß noch eine Datei in den Ordner %PfadVariable% kopiert werden.
Letzendlich -> Übergib die Variable %PfadVariable% der Bat-Datei X damit der restliche Kladeradatsch ohne manuelle Eingabe läuft.
Wie kann ich das bewerkstelligen bitte? Bin für jeden Tip dankbar.
Gruß
Schnitzel
[Edit Biber ] Nach relativ zeitnaher Rückmeldung im Juni 2008 auf "Gelöst" und "Geschlossen" gesetzt.[/Edit]
ich habe mich nun durch mehrere Beiträge hier gearbeitet. Bis jetzt habe ich nur nichts gefunden was mir hilft, bzw. ich konnte es mir aus den ganzen "Code-Schnipseln" nichts funktionierendes zusammensetzen.
Mein Anliegen:
Es gibt bei unseren Benutzen auf C:\ in einer Oracle Verzeichnisstruktur einen bestimmten Ordner, in welchem die Datei "tnsnames.ora" (eventuell) geändert werden muß. Ebenso muß eine neue Datei in diesen Ordner neu hinzugefügt werden.
Der Pfad könnte sein:
C:\oracle\ora81\network\ADMIN</font>
Wenn das immer so der Fall wäre wäre das wunderbar.
Nun ist es so das manche Benutzer eine andere Oracle Version haben und sich somit der Pfad ändert.
Dieser könnte dann
C:\oracle\ora82\network\ADMIN
Ich muß immer in den Ordner network\ADMIN
Den finde ich mittels:
dir %systemdrive%\oracle\*. /s > orpath.txt
Nun müsste die die Textdatei ausgelesen werden, der Pfad als Variable übernommen.
Der nächste Schritte wäre: Finde in %PfadVariable% die Datei "tnsnames.ora" schau in die datei ob folgender Inhalt schon vorhanden ist:
Inhalt der auf Existenz zu überprüfen wäre---------------
#####################################################################
# MEINS
#####################################################################
MEINS.world =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = HOSTNAME)
(PORT = 12345)
)
)
(CONNECT_DATA =
(Service_name = MEINS)
)
)
Wenn diese Info nicht drinnen steht, soll sie eingefügt werden. Dabei ist egal WO sie steht. Oben, unten, mitte.
Wenn diese Info schon vorhanden ist, lass alles wie es ist.
Zusätzlich muß noch eine Datei in den Ordner %PfadVariable% kopiert werden.
Letzendlich -> Übergib die Variable %PfadVariable% der Bat-Datei X damit der restliche Kladeradatsch ohne manuelle Eingabe läuft.
Wie kann ich das bewerkstelligen bitte? Bin für jeden Tip dankbar.
Gruß
Schnitzel
[Edit Biber ] Nach relativ zeitnaher Rückmeldung im Juni 2008 auf "Gelöst" und "Geschlossen" gesetzt.[/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 23419
Url: https://administrator.de/forum/ordner-finden-und-eine-darin-enthaltene-text-datei-ergaenzen-23419.html
Ausgedruckt am: 13.01.2025 um 08:01 Uhr
4 Kommentare
Neuester Kommentar
Moin Schnitzel,
ist ja alles machbar.
Rückfragen:
1) Die o.a. Connect-Infos, also dieser Service "MEINS", die würde ich (an die Zukunft denken) gleich aus einem Verzeichnis holen, in dem dann die Einzel-Textdateien "Meins.ora", Meinzweites.ora", "NochEins.ora" etc. stehen.
Alle diese Ora's werden überprüft und ggf. eingefügt, heute existiert halt nur die Meins.ora.
Wäre das eine sinnvolle Strategie?
2) Musst du die SQLNet.ora oder irgendwelche Listener.Ora auch anpassen?
3) Du schreibst, wenn diese Connection nicht drin ist, dann anfügen. Okay.
Wenn sich bei dieser Connection aber der Port, der DB-Server oder andere Parameter ändern - das prüfst Du nicht über diesen Batch?
Gruß Biber
ist ja alles machbar.
Rückfragen:
1) Die o.a. Connect-Infos, also dieser Service "MEINS", die würde ich (an die Zukunft denken) gleich aus einem Verzeichnis holen, in dem dann die Einzel-Textdateien "Meins.ora", Meinzweites.ora", "NochEins.ora" etc. stehen.
Alle diese Ora's werden überprüft und ggf. eingefügt, heute existiert halt nur die Meins.ora.
Wäre das eine sinnvolle Strategie?
2) Musst du die SQLNet.ora oder irgendwelche Listener.Ora auch anpassen?
3) Du schreibst, wenn diese Connection nicht drin ist, dann anfügen. Okay.
Wenn sich bei dieser Connection aber der Port, der DB-Server oder andere Parameter ändern - das prüfst Du nicht über diesen Batch?
Gruß Biber
Moin Schnitzel,
ich habe mal einen einfachen lösungsansatz gewählt.
Voraussetzungen:
a) der TNS-Homepath wird wie-auch-immer ermittelt.
Heißt im Batch "TNSHome". Siehe Notizen.
b) die neue(n) Connections stehen in Einzeldateien mit der Endung ".ora"
Im Batch im Pfad "DefaultOraPath"
c) Diese Connection-Ora#s heißen Meins.ora, wenn die Connection "Meins" heißt,
Alfred.ora, wenn die Connection "Alfred" heißt usw.
d) Die xyz.ora's sind so formatiert, dass ZUMINDEST die Suchstrings
"Service_name" (alternativ ginge "SID" oder "CONNECT_Data") und "Meins" ("Alfred"...)
in der gleichen Zeile stehen.
Also so formatiert sind:
#---------snipp Meins.ora
MEINS.world =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = HOSTNAME) (PORT = 12345)))
(CONNECT_DATA = (Service_name = MEINS)))
#-------snapp Meins.ora
Unter diesen (IMHO machbaren) Voraussetzungen geht es hiermit:
HTH Biber
ich habe mal einen einfachen lösungsansatz gewählt.
Voraussetzungen:
a) der TNS-Homepath wird wie-auch-immer ermittelt.
Heißt im Batch "TNSHome". Siehe Notizen.
b) die neue(n) Connections stehen in Einzeldateien mit der Endung ".ora"
Im Batch im Pfad "DefaultOraPath"
c) Diese Connection-Ora#s heißen Meins.ora, wenn die Connection "Meins" heißt,
Alfred.ora, wenn die Connection "Alfred" heißt usw.
d) Die xyz.ora's sind so formatiert, dass ZUMINDEST die Suchstrings
"Service_name" (alternativ ginge "SID" oder "CONNECT_Data") und "Meins" ("Alfred"...)
in der gleichen Zeile stehen.
Also so formatiert sind:
#---------snipp Meins.ora
- MEINS
MEINS.world =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = HOSTNAME) (PORT = 12345)))
(CONNECT_DATA = (Service_name = MEINS)))
#-------snapp Meins.ora
Unter diesen (IMHO machbaren) Voraussetzungen geht es hiermit:
::-snipp AppendAnOra.bat
@echo off & setlocal
Set "DefaultOraPath=\\server27\oraconns"
Set "TNSHome=c:\oracle\ora81\network\ADMIN"
:: Ich lass mal die Ermittlung des TNSHome-Verzeichnisses weg.
:: Du hast ja schon eine Methode gefunden, ich würde eher
:: diesen Pfad aus der Registry lesen (HKLM\Software\Oracle\Oracle_Home]
:: und die "festen" Unterpfade "network\ADMIN" dranhängen.
If NOT exist %TNSHome%\TNSNames.ora (echo %TnsHome%\TNSNames.ora nicht gefunden!) && goto :eof
FOR /f "delims=" %%i in ('dir /b /s %DefaultOraPath%\*.ora') do call :AppendOra %%~ni "%%i"
goto :eof
+++++++++++++
:AppendOra
:: --gibt es Zeile mit "Service_name" UND "Meins" (oder wie der Service heißt) ?
(find /i "Service_Name" %TnsHome%\TNSNames.ora|Find /i "%1">nul) && goto :eof
:: wer <b>hier</b> ankommt, hat KEINEN Eintrag gefunden...
echo DebugInfo Errorlevel 1!! Eintrag "%1" wird angefügt.
echo.>>%TnsHome%\TNSNames.ora
copy /b %TNSHome%\TNSNames.ora+%2 %TnsHome%\TNSNames.ora >nul
goto :eof
::-snapp AppendAnOra.bat