36539
09.10.2006, aktualisiert am 18.10.2006
13151
14
0
Installationspfad einer Anwendung suchen auf unbekanntem PC
Hallo an Alle,
ist es möglich per Batch eine bekannte Anwendung, in meinem Falle nero.exe auf einem unbekannten Windows-PC-System zu finden und als Ergebnis das LW und den Installationspfad bis zu ../nero.exe jeweils getrennt als Variablen auszugeben?
Alle meine Versuche mit Fertig-Tools, wie z. Bsp. which.exe und fpath.exe, schlagen bei mir fehl. Sie suchen und finden generell alle nur auf LW C. Mit dem For-Befehl komme ich leider auch nicht weiter - zu wenig Erfahrung.
Danke für jede Hilfe
Gruß
Onegasee59
ist es möglich per Batch eine bekannte Anwendung, in meinem Falle nero.exe auf einem unbekannten Windows-PC-System zu finden und als Ergebnis das LW und den Installationspfad bis zu ../nero.exe jeweils getrennt als Variablen auszugeben?
Alle meine Versuche mit Fertig-Tools, wie z. Bsp. which.exe und fpath.exe, schlagen bei mir fehl. Sie suchen und finden generell alle nur auf LW C. Mit dem For-Befehl komme ich leider auch nicht weiter - zu wenig Erfahrung.
Danke für jede Hilfe
Gruß
Onegasee59
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 41790
Url: https://administrator.de/contentid/41790
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
14 Kommentare
Neuester Kommentar
Moin Onegasee,
endlich mal eine Frage, die ich beantworten kann:
am CMD-Prompt wären Eingabe und Output:
...wobei diese Lw-Liste "c d e f g h" von Dir beliebig verkürzt/erweitert werden kann.
Im Batch jeweils 2 Prozentzeichen statt einem und statt "@echo" am Ende
"....do Set "neroLw=%%~di" & set "neropath=%%~pi"
Gruß
Biber
endlich mal eine Frage, die ich beantworten kann:
am CMD-Prompt wären Eingabe und Output:
>for %a in (c d e f g h) do @for /f %i in ('dir /s /b %a:\nero.exe ^2^>nul') do @echo "Lw=%~di" path="%~pi"
"Lw=c:" path="\Programme\Ahead\Nero\"
...wobei diese Lw-Liste "c d e f g h" von Dir beliebig verkürzt/erweitert werden kann.
Im Batch jeweils 2 Prozentzeichen statt einem und statt "@echo" am Ende
"....do Set "neroLw=%%~di" & set "neropath=%%~pi"
Gruß
Biber
thx, Onegasee59,
zum Üben habe ich noch eine schnellere Variante für Dich:
[am CMD-Prompt]
Der findet auf jeden Fall die "zugeordnete" Nero.exe-Installation.
Unschön daran ist, dass meistens die Pfade in der Kurzform "C:\PROGRA~1\...." dargestellt sind, was ich nicht ganz zeitgemäß und etwas unästhetisch finde.
Aber für die Programmlogik ist es sicherlich egal.
Wenn Du hier statt "@echo ....." wieder "set lw=... & set pfad=.." nimmst, passt das auch.
Gruß
Biber
zum Üben habe ich noch eine schnellere Variante für Dich:
[am CMD-Prompt]
>for /f "tokens=2 delims==% " %i in ('ftype^|find /i "nero.exe"') do @echo lw:[%~di] pfad:[%~pi]
Der findet auf jeden Fall die "zugeordnete" Nero.exe-Installation.
Unschön daran ist, dass meistens die Pfade in der Kurzform "C:\PROGRA~1\...." dargestellt sind, was ich nicht ganz zeitgemäß und etwas unästhetisch finde.
Aber für die Programmlogik ist es sicherlich egal.
Wenn Du hier statt "@echo ....." wieder "set lw=... & set pfad=.." nimmst, passt das auch.
Gruß
Biber
Moin onegasee59,
wenn es um die eine installierte Version geht, würde ich die Registry befagen:
Output:
Deine Variante über NeroCMD (am Prompt gezeigt
Gruß
Biber
wenn es um die eine installierte Version geht, würde ich die Registry befagen:
:: ----snipp getNeroInfo.bat
@echo off & setlocal
for /f "tokens=3" %%a in ('reg query "HKCU\Software\AHead" /s ^|find /i "RegisteredTypesNeroVersion"') do Set "NeroVers=%%a"
for /f "tokens=3" %%a in ('reg query "HKCU\Software\AHead" /s ^|find /i "RegisteredTypesNeroPath"') do Set "NeroPath=%%a"
for /f %%i in ("%neropath%") do echo Nero-Version [%NeroVers%], Installiert auf Drive:[%%~di] Pfad: [%%~pi]
Output:
>getNeroInfo.bat
Nero-Version [6.6.0.16], Installiert auf Drive:[C:] Pfad: [\PROGRA~1\Ahead\Nero\]
>>for /f "tokens=4" %a in ('c:\PROGRA~1\Ahead\Nero\nerocmd.exe --version^|find "API"') do @echo Nero-API-Version: %a
Nero-API-Version: 6.6.0.16
Gruß
Biber
Sieht doch gut aus, onegasee59,
aber das
Ich hatte zwar gehofft, ich könnte mich vor der Antwort auf die Frage nach der Batch-Laufwerksidentifizierung drücken. Aber what shalls...
Also, schlechte Nachricht: Kann ich mit Batch-Bordmitteln nicht prüfen/erkennen.
Gute Nachricht - in solchen Fällen mach ich es wie MacGyver und schraube mir aus zwei Strohhalmen und einer Erdnuss irgendwas zusammen.
Ich kann mit VBS oder JS (was ich wohl auf jedem Rechner vorfinde) ja eben mal die Laufwerke, die ich brauche, abfragen.
In VBS gibt es das FileSystemObject, das wiederum eine Drives-Collection liefern kann (alle Lw, die der Rechner kennt).
Und jeder Drive hat einen DriveType mit einem von diesen 6 Werten:
Also brate ich mir einen kleinen VBS-Schnipsel zusammen (den ich zur Not aus im Batch mit "echo" erzeugen kann).
Folgende Quick&Dirty-Strategie: Ich will
- eine GetDrives.vbs
- die mir beim Aufruf OHNE Paramter alle Fixed-Laufwerke als Text(liste) zurückgibt, z.B. "C,D,E"
- optional noch bestimmte andere Laufwerkstypen (meinetwegen Netz-Laufwerke) ergänzt.
Die optionalen gebe ich als Parameter (num. Lw-Typ wie oben) an, wenn ich will
Das sieht dann im ganzen Satz so aus:
Dieser Schnipsel liefert am CMD-Prompt:
Denke, den kannst Du noch einbauen bei Bedarf.
Gruß
Biber
aber das
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) ..
ist ja wirklich unschön, da gebe ich Dir Recht.Ich hatte zwar gehofft, ich könnte mich vor der Antwort auf die Frage nach der Batch-Laufwerksidentifizierung drücken. Aber what shalls...
Also, schlechte Nachricht: Kann ich mit Batch-Bordmitteln nicht prüfen/erkennen.
Gute Nachricht - in solchen Fällen mach ich es wie MacGyver und schraube mir aus zwei Strohhalmen und einer Erdnuss irgendwas zusammen.
Ich kann mit VBS oder JS (was ich wohl auf jedem Rechner vorfinde) ja eben mal die Laufwerke, die ich brauche, abfragen.
In VBS gibt es das FileSystemObject, das wiederum eine Drives-Collection liefern kann (alle Lw, die der Rechner kennt).
Und jeder Drive hat einen DriveType mit einem von diesen 6 Werten:
"0" = "Unknown type of drive"
"1" = "Removable drive"
"2" = "Fixed drive"
"3" = "Network drive"
"4" = "CD-ROM drive"
"5" = "RAM Disk"
Also brate ich mir einen kleinen VBS-Schnipsel zusammen (den ich zur Not aus im Batch mit "echo" erzeugen kann).
Folgende Quick&Dirty-Strategie: Ich will
- eine GetDrives.vbs
- die mir beim Aufruf OHNE Paramter alle Fixed-Laufwerke als Text(liste) zurückgibt, z.B. "C,D,E"
- optional noch bestimmte andere Laufwerkstypen (meinetwegen Netz-Laufwerke) ergänzt.
Die optionalen gebe ich als Parameter (num. Lw-Typ wie oben) an, wenn ich will
Das sieht dann im ganzen Satz so aus:
:: --- getDrivesIWant2C.bat
@echo off & setlocal
set vbsSnippet=%temp%\%random%.vbs
>%vbsSnippet% echo Set FSO = CreateObject("Scripting.FileSystemObject")
>>%vbsSnippet% echo Set Drives = FSO.Drives
>>%vbsSnippet% echo set Args = wscript.arguments
>>%vbsSnippet% echo alldrives=""
>>%vbsSnippet% echo wanteddrvs="2"
>>%vbsSnippet% echo for i=0 to Args.count-1
>>%vbsSnippet% echo wanteddrvs= wanteddrvs + "," + args(i)
>>%vbsSnippet% echo next
>>%vbsSnippet% echo For Each d in Drives
>>%vbsSnippet% echo if instr(1,wanteddrvs,d.Drivetype) then alldrives= alldrives +"," + d.Driveletter
>>%vbsSnippet% echo Next>>%vbsSnippet%
>>%vbsSnippet% echo wscript.echo mid(alldrives,2)
>>%vbsSnippet% echo Set Drives = nothing
>>%vbsSnippet% echo Set FileSystemObject = nothing
>>%vbsSnippet% echo wscript.quit
REM Ein bisschen Demo:
For /f %%i in ('cscript //nologo %vbsSnippet%') do echo [DEBUG Lw-Liste nur Fixed ] %%i
For /f %%i in ('cscript //nologo %vbsSnippet% 1 4 ') do echo [DEBUG Lw-Liste Fixed + Removable+ CDRom] %%i
REM Ende von: Ein bisschen Demo:
For /f %%i in ('cscript //nologo %vbsSnippet%') do set "lwliste=%%i"
echo [Lw-Liste Fixed] %lwliste%
echo [Der For-Befehl nur Fixed-Lw:.. for %%%%a in (%%lwliste%%) ..-^>.. for %%%%a in (%lwliste%)
del %vbsSnippet%
>getdrivesIWant2C.bat
[DEBUG Lw-Liste nur Fixed ] C,D
[DEBUG Lw-Liste Fixed + Removable+ CDRom] A,C,D,F,R
[Lw-Liste Fixed] C,D
[Der For-Befehl nur Fixed-Lw:.. for %%a in (%lwliste%) ..->.. for %%a in (C,D)
Denke, den kannst Du noch einbauen bei Bedarf.
Gruß
Biber
Okay, onegasee59,
war ja nicht fair von mir, auch noch einen Mehrzeiler ganz ohne Kommentare hier abzuladen.
So was tun nicht mal Batchler...vollkommen kommentarlose Schnipsel irgendwo hinstellen.
Eigentlich nicht.
Ich hatte mir die Kommentare im VBS-Teil geschenkt, weil die definitiv keiner lesen kann
in den anderthalb Sekunden, in denen dieses temporäre Snippet im %temp%-Verzeichnis existiert.
Würde es ein dauerhaftes VBS-Schnipselchen sein sollen, wäre meine Kommentierung in etwa so:
Dann lässt es sich wenigstens in Ansätzen nachvollziehen.
Gruß
Biber
P.S. was ich immer noch nicht verstanden habe: Wozu brauchst Du diese Trennung von Drive und Path der "Nero.exe"?
Du verwendest die doch ohnehin nur in Kombination.
war ja nicht fair von mir, auch noch einen Mehrzeiler ganz ohne Kommentare hier abzuladen.
So was tun nicht mal Batchler...vollkommen kommentarlose Schnipsel irgendwo hinstellen.
Eigentlich nicht.
Ich hatte mir die Kommentare im VBS-Teil geschenkt, weil die definitiv keiner lesen kann
in den anderthalb Sekunden, in denen dieses temporäre Snippet im %temp%-Verzeichnis existiert.
Würde es ein dauerhaftes VBS-Schnipselchen sein sollen, wäre meine Kommentierung in etwa so:
' GetDrives.vbs
Set FSO = CreateObject("Scripting.FileSystemObject") ' Ein FileSystemObject brauche ich...
Set Drives = FSO.Drives ' denn das liefert mir die Drive-Collection
set Args = wscript.arguments ' Falls der Benutzer Argumente angegeben hat, nenn ich die "Args"
alldrives="" ' Alldrives will ich später zurückgeben..einen String der Form "C,D,R"
wanteddrvs="2" ' immer will ich die Laufwerke Type "2"="Fixed Drives"
for i=0 to Args.count-1 ' Falls Parameter angegeben, dann in einen String schreiben ("2,4,5")
wanteddrvs= wanteddrvs + "," + args(i) ' "wanteddrvs", weil es der User ja so wants...
next
For Each d in Drives ' Für jeden Drive d, den der Rechner kennt....
if instr(1,wanteddrvs,d.Drivetype) > 0 then alldrives= alldrives +"," & d.Driveletter
' wenn der Type ("0" oder "1" oder..."5") in dem Text "wanteddrvs" (= "2.4.5") ist....
' dann ein Komma und den zugehörigen DriveLetter zu "alldrives" dazu...
Next
wscript.echo mid(alldrives,2) ' In alldrives steht MINIMAL ",C" ; NORMAL "C,D,E" oder sowas.
' Erstes zeichen=Komma hauen wir wech.
Set Drives = nothing ' ja, ja ..mein Ordnungsfimmel...diese und die folgenden Zeilen sind nicht Pflicht.
Set FileSystemObject = nothing ' selbst erschaffene Objects auch selbst zerstören...welcher Bill sollte das für uns tun?
wscript.quit ' und damit es auch jedes M$ mitbekommt, dass hier Ende ist, schreiben wir das.
Dann lässt es sich wenigstens in Ansätzen nachvollziehen.
Gruß
Biber
P.S. was ich immer noch nicht verstanden habe: Wozu brauchst Du diese Trennung von Drive und Path der "Nero.exe"?
Du verwendest die doch ohnehin nur in Kombination.
Moin onegasee59,
eine TOP-Seite, die Du da hast. Respekt.
Dann noch mal der Vollständigkeit halber:
Wenn es tatsächlich um die installierte Nero-Version geht, dann würde ich natürlich
- als erste Wahl die Registry befragen
- als zweite Wahl dieses FType-Geraffel nutzen (das ja auch nur über Bande die Registry-Einträge widerspiegelt).
- als definitiv letzte Krücke bleibt dieser Weg über das Dateisystem - der ist ja gerade bei solchen beliebten Tools wie WinZip oder Nero höchst unsicher.
Denn da hat ja jeder DAU/jede DAUin irgendwo eine alte, eine Beta, eine halbe Installation in irgendeinem vergessenen Ordner.
Von Sicherungen auf Festplatte 3 oder 4 ganz zu schweigen.
Ach ja, was den Vorab-Blick betrifft: das Angebot nehme ich dankend an.
Schönen Abend
Biber
eine TOP-Seite, die Du da hast. Respekt.
Dann noch mal der Vollständigkeit halber:
Wenn es tatsächlich um die installierte Nero-Version geht, dann würde ich natürlich
- als erste Wahl die Registry befragen
- als zweite Wahl dieses FType-Geraffel nutzen (das ja auch nur über Bande die Registry-Einträge widerspiegelt).
- als definitiv letzte Krücke bleibt dieser Weg über das Dateisystem - der ist ja gerade bei solchen beliebten Tools wie WinZip oder Nero höchst unsicher.
Denn da hat ja jeder DAU/jede DAUin irgendwo eine alte, eine Beta, eine halbe Installation in irgendeinem vergessenen Ordner.
Von Sicherungen auf Festplatte 3 oder 4 ganz zu schweigen.
Ach ja, was den Vorab-Blick betrifft: das Angebot nehme ich dankend an.
Schönen Abend
Biber