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

Mittels Batch-Datei einen Installationspfad herausfinden

Frage Entwicklung Installation

Mitglied: sonoflithium

sonoflithium (Level 1) - Jetzt verbinden

19.05.2005, aktualisiert 18.10.2012, 13251 Aufrufe, 12 Kommentare

Mein Ziel ist es aus einer Textdatei einen bestimmten Teil herauszuschneiden und in eine neue datei einfügen. Bsp:
auszug der text datei (asdf.txt):
  DB OPEN    SERVER NAME  192.168.1.34:C:\Programme\consens\zc21\Daten\Ma1\ZcDatenbank.fdb   USER NAME  consens   OPEN

den Teil "C:\Programme\consens\zc21\Daten\Ma1\ZcDatenbank.fdb" müsste ich in einer anderen Textdatei abspeichern können...

Derzeitige batchdatei (auszug ):
set srvini="c:\asdf.txt"
echo %srvini%

For /F "tokens=1-100 delims= " %%A in (%srvini%) Do (
Echo %%A>> Konfig.txt
If "%%A"=="*:\*" (
Echo "%%A*">> Konfig.txt))

-------Leider funktioniert das überhaupt nicht
Kann mir jemand helfen?? -(ist sowas mit ner Batch-Datei möglich, besitze keinen Kompiler und bis auf den part wär eine Batch-Datei ziemlich praktisch)
Mitglied: 11078
19.05.2005 um 21:09 Uhr
Hallo,

zunächst einmal die vielleicht dumme Frage: Was sind das für Trennzeichen/Delimiter zwischen den einzelnen Einträgen innerhalb einer Zeile? Ich sehe hier Kästchen.

Ich habe die Datei asfd.txt für mich zum Testen deshalb mal vereinfacht und als Trennzeichen Kommata genommen (ich kenne mich mit dem Format nicht aus, also ergibt meine Testdatei vermutlich keinen Sinn), also

<font class="code">
NAME,192.168.1.34,C:\Programme\consens\zc21\Daten\Ma1\ZcDatenbank.fdb,USER,NAME,consens,OPEN
</font>

Zwischen der IP und dem Pfad habe ich mal ein Komma gesetzt, weil ich die Batch zum Testen ganz einfach wollte:


<font class="code">
@echo off

For /f "tokens=4 delims=," %%A in (asdf.txt) Do (
echo %%A>>konfig.txt)
</font>

Wenn der Pfad, den Du willst, immer an der selben Stelle steht, gibt doch einen festen Token an (s.o.)

Das schreibt mir in die Datei konfig.txt:

<font class="code">
C:\Programme\consens\zc21\Daten\Ma1\ZcDatenbank.fdb
</font>


Könnte es also am delimiter liegen?


Gruß,
TIM
Bitte warten ..
Mitglied: 13100
20.05.2005 um 03:00 Uhr
irgendwas.bat [srcfile] [result]
___________________________________________________________________
FOR /F "tokens=2,3 delims=:" %%A IN ('TYPE %1') DO echo %%A:%%B >> temp.tmp
FOR /F "tokens=1 delims= " %%C IN ('TYPE temp.tmp') DO echo %%C >> %2
DEL temp.tmp

_____________________________________________________________________
in der zweiten zeile ("delims=") gegebenenfalls das "kasterl" mit dem entsprechenden zeichen ersetzen.
Bitte warten ..
Mitglied: sonoflithium
20.05.2005 um 11:59 Uhr
Danke für die Antwort!

@Tim
Es sind Kästchen... ist eine Borland Konfigurationsdatei... weiss auch nicht warums ausgerechnet kästchen sind. Leider kann der Pfad unter Umständen GANZ woanders stehen und: Es kann mehrere davon geben.

@13100
Das kommt dem ganzen schon sehr nahe! ich denke damit bekomm ichs hin, danke!
Bitte warten ..
Mitglied: 13100
20.05.2005 um 12:58 Uhr
die kästchen sind mit sehr hoher wahrscheinlichkeit
tabulatoren die lediglich falsch angezeigt werden.
das format wird allseits gern als "tabstop getrennte
textdatei" bezeichnet.
Bitte warten ..
Mitglied: sonoflithium
23.05.2005 um 17:26 Uhr
Scheinen Trennzeichen zu sein, z. Glück gehts aber auch anders einfacher...
Aber: Meine gewonnenen Parameter muss ich noch in einer Exe eingeben, was natürlich automatisch funktionieren sollte.
Muster:
%javart%\bin\keytool.exe -genkey -alias tomcat -keyalg RSA -keystore %cd%\SSLkey.keystore
<----Aufruf der Exe-Datei
Nun müsste man manuelle Eingaben machen, die Werte hiefür habe ich aber in der *.bat, wie kann ich diese Werte übergeben / die Eingaben automatisieren??
Bitte warten ..
Mitglied: Robertico
19.09.2005 um 20:31 Uhr
Das Thema ist genau das was ich suche.

Habe einen EXE-Namen und muß nun wissen in welchem Pfad diese installiert wurde. Aus den Beiträgen kann ich das nicht heraus lesen.
Bitte warten ..
Mitglied: jtrumpfheller
31.01.2006 um 17:32 Uhr
Genau die gleiche Problematik tut sich bei mir bzw. bei meinem Kollegen auf:

aus einer Datei in einem bestimmten Verzeichnis sollen Zeilen ausgewertet werden, in dem Pfadangaben stehen, die später ausgeführt werden sollen.

Nehme ich den Befehl wie er als Beispiel in der "help for" steht und führe es direkt im Dos-Fenster aus:

FOR /F "eol=; tokens=2,3* delims=, " %i in (infile.dat) do @echo %i %j %k

wird das erwartete Ergebnis zurückgegeben.

Ausgabe:
X:\Pfadnamen\datei.bat
X:\Pfadnamen\datei2.ini
X:\Pfadnamen\datei3.ini
X:\Pfadnamen\datei4.ksh

Versuche ich das Ganze über eine Batch-Datei zu starten, kommt Blödsinn raus.
Batchdatei:
set IN_FILE="%USERPROFILE%\infile.dat"
FOR /F "eol=; tokens=2,3* delims=, " %%i in (%IN_FILE%) do @echo %%i %%j %%k

Ausgabe:
C:\Dokumente und Einstellungen\username>FOR /F "eol=; tokens=2,3* delims=, " %i
in ("C:\Dokumente und Einstellungen\username\infile.dat") do @echo %i %j %k
und Einstellungen\username\infile.dat

Geht das etwa nicht in einer Batch-Datei?

Gruß Jörg
Bitte warten ..
Mitglied: Biber
31.01.2006 um 20:00 Uhr
Moin jtrumpfheller,

klar funktioniert das in Batchdateien, das Problem liegt wieder in den Leerzeichen im Pfad zur infile.dat.

Du musst ja erreichen, dass die Variable %IN_FILE% in der IN-Liste der FOR-Anweisung zuverlässig als Datei interpretiert wird und nicht als Liste von Worten.

Du kannst diesen Interpretationsschwierigkeiten auf mehrere Arten aus dem Wege gehen. Am einfachsten auf die Art, wie angeldust es skizziert hat, mit einem ('type datei') in der Klammer.

Je nachdem, ob Du Deine Variable %IN_FILE% mit oder ohne Anfürungszeichen definiert hast:
(MIT Anfü's) set infile1="C:\Dokumente und Einstellungen\Biber\infile.dat"
(OHNE Anfü's) set "infile2=C:\Dokumente und Einstellungen\Biber\infile.dat"
(OHNE Anfü's) set infile3=C:\Dokumente und Einstellungen\Biber\infile.dat
set inf ...........(Abfrage am CMD-Prompt)
infile1="C:\Dokumente und Einstellungen\Biber\infile.dat"
infile2=C:\Dokumente und Einstellungen\Biber\infile.dat
infile3=C:\Dokumente und Einstellungen\Biber\infile.dat

...Aufruf im Batch:
....
FOR /F "eol=; tokens=2,3* delims=, " %%i in ('type %infile1%') do echo %%i %%j %%k
..bzw.
FOR /F "eol=; tokens=2,3* delims=, " %%i in ('type "%infile2%"') do echo %%i %j %%k
FOR /F "eol=; tokens=2,3* delims=, " %%i in ('type %"infile3%"') do echo %%i %j %%k
...

HTH Biber
P.S. Ich denke nicht, dass Deine Klausel "eol=; tokens=2,3* delims=, " so sinnvoll ist.
Wie sieht denn die Datei %IN_FILE% aus?
P.P.S. @Robertico
Vielen Dank für die Info. Vielleicht kann es ja jemand gebrauchen.
Bitte warten ..
Mitglied: jtrumpfheller
01.02.2006 um 00:20 Uhr
Hey Biber,

in der ifile.dat steht wie in der Ausgabe beschrieben mit dem Unterschied, daß vor der Pfadangabe noch Folgendes steht:
B14 X:\pathname\datei.bat
B14 X:\pathname\datei2.ini
B14 X:\pathname\datei3.ini
B14 X:\pathname\datei4.ksh
usw

Herauskommen soll aber nur der Pfadname+Datei

Gruß Jörg

Moin jtrumpfheller,

klar funktioniert das in Batchdateien, das
Problem liegt wieder in den Leerzeichen im
Pfad zur infile.dat.

Du musst ja erreichen, dass die Variable
%IN_FILE% in der IN-Liste der FOR-Anweisung
zuverlässig als
Datei interpretiert wird
und nicht als Liste von Worten.

Du kannst diesen
Interpretationsschwierigkeiten auf mehrere
Arten aus dem Wege gehen. Am einfachsten auf
die Art, wie angeldust es skizziert hat, mit
einem ('type datei') in der Klammer.

Je nachdem, ob Du Deine Variable %IN_FILE%
mit oder ohne Anfürungszeichen
definiert hast:
(MIT Anfü's) set
infile1="C:\Dokumente und
Einstellungen\Biber\infile.dat"
(OHNE Anfü's) set
"infile2=C:\Dokumente und
Einstellungen\Biber\infile.dat"
(OHNE Anfü's) set infile3=C:\Dokumente
und Einstellungen\Biber\infile.dat
set inf ...........(Abfrage am CMD-Prompt)
infile1="C:\Dokumente und
Einstellungen\Biber\infile.dat"
infile2=C:\Dokumente und
Einstellungen\Biber\infile.dat
infile3=C:\Dokumente und
Einstellungen\Biber\infile.dat

...Aufruf im Batch:
....
FOR /F "eol=; tokens=2,3* delims=,
" %%i in ('type %infile1%') do echo %%i
%%j %%k
..bzw.
FOR /F "eol=; tokens=2,3* delims=,
" %%i in ('type "%infile2%"')
do echo %%i %j %%k
FOR /F "eol=; tokens=2,3* delims=,
" %%i in ('type %"infile3%"')
do echo %%i %j %%k
...

HTH Biber
P.S. Ich denke nicht, dass Deine Klausel
"eol=; tokens=2,3* delims=, " so
sinnvoll ist.
Wie sieht denn die Datei %IN_FILE% aus?
P.P.S. @Robertico
Vielen Dank für die Info. Vielleicht
kann es ja jemand gebrauchen.
Bitte warten ..
Mitglied: Biber
01.02.2006 um 09:56 Uhr
Moin jtrumpfheller,

>>>>. Ich denke nicht, dass Deine Klausel "eol=; tokens=2,3* delims=, " so sinnvoll ist.
>>>>Wie sieht denn die Datei %IN_FILE% aus?

in der ifile.dat steht wie in der Ausgabe beschrieben mit dem Unterschied, daß
vor der Pfadangabe noch Folgendes steht:
B14 X:\pathname\datei.bat
B14 X:\pathname\datei2.ini
B14 X:\pathname\datei3.ini
B14 X:\pathname\datei4.ksh

Herauskommen soll aber nur der Pfadname+Datei

dann:
- brauchst du doch Token 2 ...es sei denn, es kommen auch Pfade/Dateinamen mit Leerzeichen vor. Aber auch dann würde "tokens=2,*" reichen
- ein Komma als Delimiter ist gar nicht drin, also kann die "delims=, "-Klausel entfallen
- das "eol=;" ...na ja...ich habe auch ein paar Minuten gebraucht, um die Bedeutung dieses Features zu verstehen. Schadet aber auch nicht.

IMHO ist überdimensioniert:
FOR /F "eol=; tokens=2,3* delims=, " %%i in ('type "%infile2%"') do echo %%i %j %%k

Reichen würde sicher:
FOR /F "eol=; tokens=2,*" %%i in ('type "%infile2%"') do echo %%i %j
...
und im Normalfall (keine Pfad/Dateinamen mit Leerzeichen) sogar
FOR /F "tokens=2" %%i in ('type "%infile2%"') do echo %%i

HTH Biber
Bitte warten ..
Mitglied: jtrumpfheller
01.02.2006 um 11:12 Uhr
Danke Biber,

Reichen würde sicher:
FOR /F "eol=; tokens=2,*" %%i in ('type "%infile2%"') do echo %%i %%j

das funktioniert. Da auch im Pfadnamen Leerstellen vorkommen können, ist obige Variante sinnvoll. Und wie kriege ich es jetzt hin, die einzelnen Ergebnisse auszuwerten. Nach dem Motto:

set IN_FILE="%USERPROFILE%\infile.dat"
FOR /F "tokens=2,*" %%i in ('TYPE %IN_FILE%') do set erg1='TYPE %%i'; set erg2='TYPE %%j'; if %%erg2%%!="" (@echo %%i%%j bzw. hier wird das Programm aufgerufen); if %%erg2%%=="" (@echo %%i bzw. oder hier wird das Programm aufgerufen)

Und muß alles in einer Zeile stehen? Mit Klammern nach do (
...
)

bekomme ich Syntaxfehler.

Sorry, aber bin noch relativ newbie auf dem Gebiet

Gruß Joerg
Bitte warten ..
Mitglied: Biber
01.02.2006, aktualisiert 18.10.2012
Moin Jörg,
wie es der Zufall will, habe ich grad gestern in dem Beitrag <a href=http://www.administrator.de/forum/zwei-dateien-vergleichen-%28z.b.-auf- ... target="blank">Zwei Dateien vergleichen (z.B. auf Größee) nach erfolgtem Copy</a> etwas wortreicher das Thema "Eine CMD-Anweisung in mehreren Zeilen schreiben" dargestellt.
Weitere Beispiele findest Du auch in den neueren Biber-Tutorials im Bereich Batch und Shell.

Das Semikolon wird von der CMD.exe nicht als Trennzeichen erkannt.
Am nächsten käme diesem Zeichen das Ampersand "&", mit dem sich mehrere Anweisungen in einer Zeile unterbringen lassen
Beispiel ist mein Standard-Eröffnungssatz im Batch :"@echo off & setlocal"
Bei mehreren SET-Anweisungen solltest Du Klammern verwenden, um eine eindeutige Interpretation sicherzustellen.
Bsp..
(Set "VarA=%%i") & (Set "VarB=%%j") ........ist eindeutig.
Set VarA=%%i & Set VarB=%%j ........ist für Mensch und CMD-Interpreter gleichermaßen missverständlich.
*
Sinngemäß sollte Deine FOR..IN..DO-Anweisung so aussehen:
FOR /F "tokens=2,*" %%i in ('TYPE %IN_FILE%') do (
set erg1='TYPE %%i'
set erg2='TYPE %%j'
....
)

Also jede Anweisung in eine neue Zeile - ist am lesbarsten.
Die öffnende Klammer sollte am Ende der Zeile "FOR...IN..DO (" sein
Und zur Lesbarkeit die Klammer-Zu in einer eigenen Zeile am Ende.

HTH Biber
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...