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
GELÖST

teil des pfades einer aufgerufenen datei extrahieren

Frage Entwicklung Batch & Shell

Mitglied: urknall

urknall (Level 1) - Jetzt verbinden

04.01.2006, aktualisiert 09.01.2006, 5456 Aufrufe, 9 Kommentare

hallo,

ich habe ein kleines problem und hoffe mir kann jemand helfen.
im rahmen eines grösseren skriptes an dem ich zur zeit arbeite bin ich auf ein problem gestossen, bei dem ich im moment nicht weiter komme.

beispiel:

habe eine datei unter c:\ liegen die aufruf.cmd lautet.
aus dieser datei rufe ich per call nun eine datei auf, die unter einem beliebigen dir liegt: call c:\tmp\test\test2.cmd

im rahmen der weiterverarbeitung will ich einen teil des pfades extrahieren und weiter benutzen.

FOR /F "usebackq delims=" %%i IN ('%cd%') DO echo %%~ni funktioniert wenn ich die test2.cmd im aktuellen dir in dem sie liegt aufrufe wunderbar und spuckt mir als ergebnis "test" aus wie gewünscht. wird die datei jedoch von call in einem anderen dir aus aufgerufen funktioniert das ganze schon nicht mehr.

wäre dankbar für einen tipp wie ich es schaffen kann nur den namen des subdirs auszugeben in dem die aufgerufene datei liegt wenn das ganze von call aufgerufen wird.

grüsse urknall
Mitglied: Biber
04.01.2006 um 16:12 Uhr
Moin urknall,
gibt wie immer im Leben mehrere Möglichkeiten...

Mit der Variablen %cd% kommst Du nicht zum Ziel, weil das aktuelle Verzeichnis ja nach wie vor das Verzeichnis ist, in dem die "aufruf.cmd" steht. Du wechselst es ja nicht.

Also kannst Du es entweder wechseln oder ermittelst Laufwerk und Pfad der aufgerufenen Datei über den Parameter %0.

::---snipp Testbeispiel für die \tmp\test\aufruf.cmd
@echo Para%%0: [%0] Lw/Pfad: [%~dp0]
@FOR /F "tokens=1-2 delims=\" %%i IN ("%~p0") DO @echo %%i %%j
::---snapp Testbeispiel für die \tmp\test\aufruf.cmd

liefert folgenden Output:
$cmd$ aufruf.cmd
(call tmp\test\test2.cmd)
Para%0: [tmp\test\test2.cmd] Lw/Pfad: [C:\tmp\test\]
tmp test

Wenn ich Dich richtig verstanden habe, willst Du ja den "End"-Pfad, den letzten Zweig des ganzen Pfades extrahieren.
Also auch hier wieder mehrere Möglichkeiten:
a) die ganz unsaubere: Du weißt, dass der Gesamt-Pfad nur zwei Ebenen hat:
@FOR /F "tokens=2 delims=\" %%i IN ("%~p0") DO @echo 2.Ebene des Pfads: %%i

b) die sauberere Methode
FOR /F "tokens=1-9 delims=\" %%i IN ("%~p0") DO (
For %%a in (%%i %%j %%k %%l %%m %%n %%o %%p %%q) do set "lastpath=%%a"
)

----> in der Variablen %lastpath% steht jetzt das letzte Unterverzeichnis (max Verzeichnistiefe=9)

HTH Biber
Bitte warten ..
Mitglied: fpschultze
04.01.2006 um 21:47 Uhr
In Ergänzung zu Bibers Antwort hier noch eine Methode, aus dem kompletten Pfad den Namen des Unterverzeichnisses zu extrahieren, in dem die Batchdatei gespeichert ist:

For %%A In ("%~p0.") Do Echo %%~nA

bzw.

For %%A In ("%~p0.") Do Set lastpath=%%~nA

Getestet unter Windows XP. Verzeichnistiefe egal. Funktioniert auch mich Leerzeichen im Pfad.

Viele Grüße
Bitte warten ..
Mitglied: Biber
04.01.2006 um 22:09 Uhr
Hallo fpschultze,

freue mich sehr, Dich hier in unserem Forum lesen zu dürfen!
Hätte ich das geahnt, hätte ich Dir ein paar Bätschelchen übrig gelassen..

Herzlich willkommen!!!
Biber
P.S.
Letzte Variante auch unter W2K getestet. Verzeichnistiefe egal. Auch mit Leerzeichen im Pfad.
Bitte warten ..
Mitglied: urknall
05.01.2006 um 08:01 Uhr
vielen herzlichen dank für die informationen ihr beiden.

ich hatte gestern auch schon mit %0 und diversen varianten davon experimentiert, war also auch schon auf dem richtigen weg.
bis ich auf eine der beiden lösungen gestossen wäre , hätte aber bei mir wohl noch ein wenig gedauert ;)

ich werde die methode von frank peter vorziehen, da a) kürzer und b) uneingeschränkt in bezug auf die verzeichnistiefe, wobei es in dem speziellen fall den ich hier habe nie unter 9 ebenen gehen wird.

danke für die tolle unterstützung, die hier geleistet wird.
wie kommt man eigentlich auf so abenteuerliche konstrukte? gibt es irgendwelche seiten, die sich mit sowas beschäftigen oder wird sowas dann per brain und wissen zusammengeschachtelt bis man das gewünschte ergebnis hat?

grüsse urknall
Bitte warten ..
Mitglied: fpschultze
05.01.2006 um 12:34 Uhr
[...] gibt es irgendwelche seiten, die sich mit sowas beschäftigen [...]

Hier pflege ich eine Linksammlung:

http://www.fpschultze.de/PDlinks+viewcat.cid+1.htm

Viele Grüße
Bitte warten ..
Mitglied: Biber
05.01.2006 um 14:28 Uhr
Moin urknall,

[...] ich werde die methode von frank peter vorziehen [...]
Werde ich auch, jetzt, wo ich die kenne...

[...] oder wird sowas dann per brain und wissen zusammengeschachtelt bis man das gewünschte ergebnis [...]
Ja. Darauf läuft es raus.

Das Handwerkszeug kann man sich schon -da muss ich mal ausnahmsweise fair gegenüber M$ sein- sogar durch Lesen der "Befehlszeilenreferenz von A-Z" in der Windows-Hilfe aneignen. Sind ja keine "undokumentierten Features", die hier gezeigt werden.

Ideen, Beispiele (und auch Irrwege) gibt es auf einigen WebSites - ein paar Linkempfehlungen für "Batch & Shell" siehe unten.
Nur die Transfer-Leistung .... zu sehen, dass dieser und jener Schnipsel vielleicht auch bei Dir passen könnte, aber bei einem ganz anderen Problem.. das bleibt an Dir hängen.
In dieser Beziehung ist Batch schon etwas sehr "Handwerkliches".
10% Inspiration und 90% Transpiration.
(Soll T.A. Edison so ähnlich gesagt haben, allerdings auf ausländisch.)

Gruß Biber
Bitte warten ..
Mitglied: urknall
09.01.2006 um 12:45 Uhr
Und es geht weiter...

Noch ein kleines Problem, welches es zu lösen gibt.
Ich will in einem bestimmten Verzeichnis und allen darin enthaltenen Unterverzeichnissen alle Dateien eines bestimmten Namens ("install.cmd") ausführen lassen.

FOR /R pfad\ %%i IN (install.cmd) DO CALL %%i macht ja eigentlich auch schon das Gewünschte, allerdings wird auch versucht in Unterverzeichnissen, die nur existieren aber die Datei nicht enhalten auszuführen und es wird eine Fehlermeldung ausgespuckt weil die Datei nicht existiert.

Habe versucht ein IF EXISTS einzubauen, aber bin bis jetzt gescheitert, da das ganze syntaktisch nicht verarbeitet werden kann.

Hat jemand eine elegante Lösung für mein Problem parat?

Grüße Urknall
Bitte warten ..
Mitglied: Biber
09.01.2006 um 12:56 Uhr
Moin urknall,
parat nicht und ich hab auch erst heute abend ein wenig Ruhe dafür.
Wäre Dir dankbar, wenn Du hier in "Batch & Shell" einen neuen Thread zu diesem FOR /R- Thema aufmachen würdest mit der Skizze, die Du schon hast.

Bekommen wir aber heute noch feddich...

Grüße Biber
[Edit]
Danke für die schnelle Umsetzung!!!
[/Edit]
Bitte warten ..
Mitglied: urknall
09.01.2006 um 12:59 Uhr
Erledigt, neuer Thread aufgemacht!
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Excel Dateien durchsuchen und Teile extrahieren
gelöst Frage von BeranavanMicrosoft Office14 Kommentare

Hallo, ich habe eine große Menge an Excel Dateien, die gleichermaßen aufgebaut sind: In jeder Datei sind in Spalte ...

Batch & Shell
Powershell: Pfad des Scripts finden das ein anderes aufgerufen hast
gelöst Frage von mayho33Batch & Shell6 Kommentare

Hallo @ All! Ich frage mich momentan wie ich es anstellen muss wenn ich in einem z.B.: "IchWurdeAufgerufen.ps1" den ...

Batch & Shell
PowerShell - Teile eines Pfads in eine Variabel schreiben
gelöst Frage von ImmerKindBatch & Shell1 Kommentar

Hallo Leute:) Ich habe eine kleine Frage. Ist es möglich einem Pfad (Beispiel: \\Server\c$\Skripte\Powershell\Skrip.ps1) nur das File zu entziehen ...

Batch & Shell
Dateinamen aus vollständigem Pfad extrahieren via Batch
gelöst Frage von zensbertBatch & Shell8 Kommentare

Hi, ich habe eine Variable mit einem Dateinamen, einem wechselndem Pfad wie z.B. D:\Freigabe\Irgendein Ordner\Test1234.txt der Dateinamen und die ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 13 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 14 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 22 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...