joml
Goto Top

Dateiversion abfragen per Batch Datei

Hallo allerseits,

Kann man per Batch Datei (cmd) eine Dateiversion abfragen...?

So nach der Art "If exist.... goto END"

Sinn ist es, dass das Script nur ganz ablauft, wenn eine spez. Dateiversion (nicht Timestamp) vorhanden ist.
Irgendwie muss man doch die Dateiattribute abfragen können..?


Vielen Dank für Eure Hilfe

Gruss
JOML

Content-Key: 73372

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

Printed on: April 17, 2024 at 00:04 o'clock

Member: bastla
bastla Nov 12, 2007, updated at Oct 18, 2012 at 16:32:40 (UTC)
Goto Top
Hallo JOML2005!

Vielleicht hilft Dir ja dieser Beitrag: Versionsnummer von OCX per batch auslesen und drucken

Grüße
bastla
Member: JOML
JOML Nov 13, 2007 at 11:06:05 (UTC)
Goto Top
Hallo bastla,

Ja und Nein... komme leider nicht weiter

Ich müsste das ganze noch in eine "IF" abfrage einbauen.

Das heisst zuerst erkennen der Version, danach "..wenn Version xy, dann gehe zu END.."

Ist das möglich...??

Vielen Dank für Deine Hilfe
PS: Das Script betreffend user passwörter zurücksetzten im AD funktioniert bestens..danke face-smile

Gruss
JOML
Member: Biber
Biber Nov 13, 2007 at 11:16:43 (UTC)
Goto Top
Moin JOML,

magst Du uns denn mitteilen, welche Variante Du bis hierher verwendest?
Die meisten im Parallelthread haben doch gegen Ende eine Zeile
...
if defined Version echo %~1 - Version %Version%
...oder ähnlich.

Wieso kannst Du nicht an dieser Stelle einbauen:
if defined Version if [%Version%]==[4.7.32.5] goto :uralteGurke
if defined Version if [%Version%]==[4.7.50.0] goto :neuerAlsMeine

Bitte erläutere Dein Problem doch etwas genauer.

Danke
Biber
Member: JOML
JOML Nov 13, 2007, updated at Mar 29, 2023 at 21:33:33 (UTC)
Goto Top

Hallo Biber,

wollte es mit der obenstehenden Lösung versuchen.
Es geht darum:
Als erstes muss herausgefunden werden ob eine spez. SW Version (als Beispiel NERO 6.3.3.) installiert ist. Darum der check der Fileversion.
Wenn diese Version installiert ist, darf nichts mehr passieren.... das heisst also "goto END".
Ist aber eine andere Version installiert, soll die Batchdatei bis zum Schluss durchlaufen.

So hatte ich mir das in etwa vorgestellt.. face-smile

Die Batchdatei besteht schon.. jetzt muss ich nur noch den Teil mit der Fileversion und dem "IF" irgendwie hinbekommen...

Vielen Dank

Gruss
JOML
Member: Biber
Biber Nov 13, 2007 at 12:22:21 (UTC)
Goto Top
Moin JOML,

dann nimm (falls Du mit der FileVer.exe arbeitest) folgende Zeile bzw zwei Zeilen im Batch:
a) CMD-Prompt
for /f "tokens=2 delims== " %i in ('ftype^|find "Nero.exe"') do @for /f "tokens=5" %j in ('filever %~si /b') do @echo Set version=%j  
Set version=6.6.0.16
b) Batch
..
for /f "tokens=2 delims== " %%i in ('ftype^|find "Nero.exe"') do set nero=%%~si  
if defined nero for /f "tokens=5" %%j in ('filever %nero% /b') do Set version=%j  
if defined version if [%version%] LEQ [6.3.3] goto :shitHappens
Member: JOML
JOML Nov 13, 2007 at 13:45:21 (UTC)
Goto Top
b) Batch
..
> for /f "tokens=2 delims== " %%i in  
> ('ftype^|find  
> "Nero.exe"') do set  
> nero=%%~si
> if defined nero for /f "tokens=5"  
> %%j in ('filever %nero% /b') do Set  
> version=%j
> if defined version if [%version%] LEQ
> [6.3.3] goto :shitHappens
> 

Hallo Biber,

Vielen Dank.

Da ich das Tool "FileVer.exe" noch nicht kenne, habe ich leider noch Fragen.
1. Muss ich das Tool noch in der Batchdatei irgendwie aufrufen..? Oder wie wird erkannt ob das Tool da ist oder nicht..?
2. Muss kein Pfad zur Nero.exe angegeben werden..? z.B c:\program files\Nero\Nero.exe
3. [6.3.3] goto > Gebe ich hier ein, welche version da sein sollte..?

Sorry für die vielen Fragen.. bin leider noch nicht so ein Crack in Sachen Batch etc.

Danke nochmals für Eure Hilfe.

Gruss
JOML
Member: Biber
Biber Nov 13, 2007 at 14:01:01 (UTC)
Goto Top
Moin JOML,

1. die FileVer.exe ist nicht automatisch mit auf dem Rechner - die lässt sich bei M$ herunterladen als Bestandteil eines ResKits. Aber ebenso geht bastlas Skriptvariante im o.a. Thread.
2. Nein, der Pfad wird implizit ermittelt. Probier es aus... wenn Nero installiert ist, bekommst Du ein gültiges Ergebnis. Evtl noch "Find /i" statt nur "find", aber nach meinen Tests ist IMMER eine "Nero.exe" mit dabei, die genau so geschrieben wird (großes "N", kleines "ero.exe").
3. Jepp.

Grüße
Biber
Member: JOML
JOML Nov 13, 2007 at 16:01:02 (UTC)
Goto Top
Hallo zusammen,

Habs jetzt die Variante genommen:
set "Datei=C:\Progra~1\Muster\muster.exe"  
set "GetV=%Temp%\GetV.vbs"   
echo Set  objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")>"%GetV%"  
echo Set colFiles=objWMIService.ExecQuery ("SELECT * FROM CIM_Datafile WHERE  Name='"^&Replace(WScript.Arguments(0),"\","\\")^&"'")>>"%GetV%" echo For Each objFile in colFiles: WScript.Echo objFile.Version: Next>>"%GetV%"  
set Version=
for /f %%i in ('cscript //nologo "%GetV%" "%Datei%"') do set "Version=%%i"  
if defined Version echo %Datei% - Version %Version%
if defined Version if [%Version%]==[15.1.6.65] goto :END
del "%GetV%"  
Und es scheint zu funktionieren.. oder sieht da noch jemand ein Fehler im Script ?
Nachtrag: Es funktioniert BESTENS !!

Noch zwei Fragen:
Für was steht am Anfang "setlocal" (rechts von @echo off &)
Das Zeichen ^ hat welche Funktion..?

Vielen vielen Dank an alle.
Absolut geniale Hilfe hier im Forum.

Gruss
JOML
Member: Biber
Biber Nov 13, 2007 at 17:50:21 (UTC)
Goto Top
Moin JOML,

Noch zwei Fragen:
Für was steht am Anfang "setlocal" (rechts von @echo off &)
Das Zeichen ^ hat welche Funktion..?

"Setlocal" bedeutet, dass alle Variablen, die während der Ausführung dieses Batches neu definiert werden (mit "Set var=bla")
nur lokal, nur solange der Batch läuft existiieren.

Und Dass Du so keine bereits vorhandenen unabsichtlich überschreiben kannst (z.B. %computername% oder %username%) und dass keine Variblen-Trümmer mehr rumliegen, wenn der Batch beendet ist.

Das Caret (^) "maskiert" Zeichen, die ansonsten im Batch als Steuerzeichen besondere Bedeutung hätten.
Sagt also quasi "Hey, wenn Du das nächste Zeichen liest, liebe CMD.exe, halt die Füße still, das soll dieses Mal nur ein ganz normaler Buchstabe sein. Nicht sofort losrennen.".

Ohne das Caret würden die beiden Befehle IN DER Klammer oben ausgeführt werden, bevor überhaupt die FOR-Anweisung selbst initialisiert ist.
Durch das Caret sage ich also:
- Mach mir eine FOR-Anweisung mit whatever in der Klammer
- diese FOR-Anweisung wird erstmal syntaktisch geprüft OHNE das Zeug in der Klammer
- dann wird das Zeug in der Klammer syntaktisch geprüft und ausgeführt und zwar von einer neuen CMD.exe-Instanz.
- die neue Instanz führt den Aufruf OHNE das Caret aus.

Grüße und danke für das nette Feedback
Biber

P.S. Habe oben den Code in gleichnamige Tags gesetzt.
Verbesserungsvorschlag:
del "%GetV%" ---> soll eigentlich immer gemacht werden. also VOR der Entscheidung richtige/falsche Version und somit auch vor "Goto :END" oder "geh einfach weiter".
Member: JOML
JOML Nov 13, 2007 at 17:59:49 (UTC)
Goto Top
Alles klar.. danke für die Info face-smile

Gruss
JOML