mtb4ever
Goto Top

Mit Batch Datei Pfad suchen, diesen dann weiter verwenden

Hallo,

also ich habe folgendes vor: 1. muss eine batch datei eine andere datei suchen (die gibt es 100% nur einmal) nenn wir hier z.b. mal test.dll
2. muss die bat datei das Verzeichnis "merken" um es dann an anderer stelle einzufügen um einen anderen befehl ausführen zu können

also beispiel wie ich es mir vorstelle:


@echo off

suche test.dll und speicher pfad unter z.b. Pfad1

cd "%systemroot%\Microsoft.NET\Framework\v2.0*\"
regasm /register "Pfad1\test.dll"


der hintergrund von den ganzen is das ich ein installer baue un da das installationsverzeichnis nicht immer gleich sein muss un wenn ein anderer die setup.exe ausführt (das mit test.dll batch datei wird in setup.exe eingebunden) soll halt net arbeit haben un die datei selber suchen.


hoffe es kann einer was zusamm basteln!

MfG

MTB

Content-ID: 67314

Url: https://administrator.de/contentid/67314

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

TuXHunt3R
TuXHunt3R 28.08.2007 um 16:34:20 Uhr
Goto Top
Was ist "regasm"? Kenne ich gar nicht.....
MTB4ever
MTB4ever 28.08.2007 um 16:36:22 Uhr
Goto Top
is en teil von microsoft framwork 2.0 um in meinen fall z.b. bestimmte dll´s zu registrieren! (regasm.exe)

aber tut ja bei den thema net viel zur sache falls dich das irritieren sollte
Biber
Biber 28.08.2007 um 18:36:38 Uhr
Goto Top
Moin MTB4ever,

kannst Du z.B. mit dem FOR/R-Befehl machen [Demo am CMD-Prompt]:
for /r "c:\" %i in (test.dll) do @echo Set "pfad1=%~dpi"  
[Ungetestet; im Batch zwei %-Zeichen statt einem]
wobei das "@echo " hier nur zum Testen ist und das Startverzeichnis "c:\" optional und vollkommen willkürlich.

Falls Du auf mehreren/allen Laufwerken suchen willst, kannst Du noch eine FOR-Anweisung herumbasteln.
for %j in (c d e ) do @for /r "%j:\" %i in (test.dll) do @echo Set "pfad1=%~dpi"  

Grüße
Biber
MTB4ever
MTB4ever 29.08.2007 um 08:24:21 Uhr
Goto Top
C:\>test.bat
Der Befehl ""Beispiel.exe"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Drücken Sie eine beliebige Taste . . .


kommt da als fehler

in test.bat steht:

@echo off

for %%j in (c d e ) do @for /r "%%j:\" %%i in (beispiel.exe) do Set "pfad1=%%~dpi"

call "beispiel.exe"
pause


(beispiel.exe liegt in diesen beispiel unter C:\Programme\Testordner\Programm\, kann aber auch wo anders liegen)

mfg MTB
MTB4ever
MTB4ever 29.08.2007 um 08:51:32 Uhr
Goto Top
also im endeffekt soll es dann so etwa aussehen:

@echo off


for %%j in (c d e ) do @for /r "%%j:\" %%i in (beispiel.exe) do Set "pfad1=%%~dpi"

cd "%systemroot%\Microsoft.NET\Framework\v2.0*\"

regasm /register "%Pfad1%\ndm.dll"

pause

(ich such nach der exe weil ich net 100% weiß obs die dll wo anders nochma gibt, aber wo die exe gibs nur einmal un da die dll im selben verzeichnis liegt sollte es theoretisch ja so gehn)


wenn ich das so ausführe kommt aber:

C:\>test.bat
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.42
Copyright (C) Microsoft Corporation 1998-2004. Alle Rechte vorbehalten.

RegAsm : error RA0000 : Das angegebene Pfadformat wird nicht unterstützt.
Drücken Sie eine beliebige Taste . . .

hoffe kann einer helfen

mfg MTB
Biber
Biber 29.08.2007 um 18:51:29 Uhr
Goto Top
Moin MTB4ever,

sorry, ich hätte es auch testen sollen.
Also, folgende kleine Nachbesserungen wären sinnvoll:
1) bei der Datei, nach der Du suchst ("Beispiel.exe" oder "Beispiel.dll" noch ein "?" anhängen.
2) Falls das angedeutete Suchen auf mehreren Laufwerken nötig sein sollte, würde ich die Laufwerke nacheinander, aber nicht in einer FOR-Anweisung abklappern.
3) und dann bitte erstmal das Ergebnis anzeigen, bevor Du tatsächlich irgendein Regasm-Aufruf machst.

In Batch also:
@echo off & Setlocal
for /r "c:\" %%i in (beispiel.exe?) do Set "pfad1=%%~dpi"  
if not defined pfad1 for /r "d:\" %%i in (beispiel.exe?) do Set "pfad1=%%~dpi"  
if not defined pfad1 for /r "e:\" %%i in (beispiel.exe?) do Set "pfad1=%%~dpi"  

cd "%systemroot%\Microsoft.NET\Framework\v2.0*\"   

ECHO regasm /register "%Pfad1%\ndm.dll"  

Bei der Anzeige des regasm-Aufrufs sollte jetzt der "richtige" Pfad angezeigt werde mit der Auffälligkeit, dass nach dem gefundenen pfad1 vor der ndm.dll ZWEI Backschlashes stehen.
Der CMD.exe mach das nichts aus (C:\test\xy.txt ist gleichbedeutend c:\\test\\\xy.txt).

Ob die RegAsm.exe das ab kann, weiß ich nicht - ggf. sonst den Regasm-Aufruf ändern in:
regasm /register "%Pfad1%ndm.dll"   

Grüße
Biber
MTB4ever
MTB4ever 30.08.2007 um 14:36:23 Uhr
Goto Top
danke jetzt geht es!

mfg MTB