Versionsnummer, Datum, Filename auslesen
Guten Tag,
ich habe folgende Problemstellung zu lösen: In einem Ordner auf einem Server liegen sehr viele .exe Dateien. Diese .exe Dateien sollen jetzt mit ihrer Versionnummer, ihrem Datum (wobei ich noch klären muss, welches Datum gemeint ist) und ihrem Namen (ohen Pfad und Dateiendung) aufgelistet werden, sodass diese in Excel weiterverabeitet werden können.
Meine Kenntnisse in Batch sind bescheiden, in VBS habe ich gar keinen Plan.
Zur Verfügung steht mir alles, was ich brauche. Tools, OS etc. sind also egal. Schön wäre es, wenn ich WinXP mit Boardmitteln nutzen könnte.
Meine Lösung sieht so aus. Sie funktioniert und gibt mir lauter Zeilen des Schemas ABCD;TT.MM.JJJJ;VERS aus. Das sieht eigentlich ganz gut aus.
- Den VBS Teil in Zeile 6,7,8 habe ich gar nicht verstanden. Diese Zeilen sind Teil eines Codes, den ich hier bei administrator.de gefunden habe (ich glaube bearbeitet durch Biber und Bastla - vielen Dank dafür!)
- Die Zeile 13 verstehe ich auch nicht (besser gesagt das 'cscript //nologo "%GetV%" "%~1"') - ebenfalls ein kopierter Abschnitt des Codes von Biber und Bastla.
- Die Zeile 15 gibt mir ein Dateidatum aus (durch das %%~tj).
- Das Datum gibt mir auch die Uhrzeit dazu aus. Daher habe ich in Zeile 18 einfach die letzten 7 Zeichen des Strings abgeschnitten.
- Das Problem mit dem Dateinamen habe ich in Zeile 20,21,22 gelöst, indem ich einfach fest die ersten 3 und die letzten 4 Zeichen abschneide. Das ist natürlich höchst statisch (doof).
Jetzt meine Frage:
Wie muss ich dieses Script anpassen, damit es 1. auch mit beliebigen Pfaden funktioniert und 2. mir auch die anderen Datum der Datei ausgibt?
Dies ist kein dringliches Problem, ich kann mit dem Skript ja händisch das Ziel erreichen. Dennoch würde ich mich freuen, wenn Verbesserungsvorschläge kommen, insbesondere bzgl. des Datums. Herzlichen Dank!
ich habe folgende Problemstellung zu lösen: In einem Ordner auf einem Server liegen sehr viele .exe Dateien. Diese .exe Dateien sollen jetzt mit ihrer Versionnummer, ihrem Datum (wobei ich noch klären muss, welches Datum gemeint ist) und ihrem Namen (ohen Pfad und Dateiendung) aufgelistet werden, sodass diese in Excel weiterverabeitet werden können.
Meine Kenntnisse in Batch sind bescheiden, in VBS habe ich gar keinen Plan.
Zur Verfügung steht mir alles, was ich brauche. Tools, OS etc. sind also egal. Schön wäre es, wenn ich WinXP mit Boardmitteln nutzen könnte.
Meine Lösung sieht so aus. Sie funktioniert und gibt mir lauter Zeilen des Schemas ABCD;TT.MM.JJJJ;VERS aus. Das sieht eigentlich ganz gut aus.
- Den VBS Teil in Zeile 6,7,8 habe ich gar nicht verstanden. Diese Zeilen sind Teil eines Codes, den ich hier bei administrator.de gefunden habe (ich glaube bearbeitet durch Biber und Bastla - vielen Dank dafür!)
- Die Zeile 13 verstehe ich auch nicht (besser gesagt das 'cscript //nologo "%GetV%" "%~1"') - ebenfalls ein kopierter Abschnitt des Codes von Biber und Bastla.
- Die Zeile 15 gibt mir ein Dateidatum aus (durch das %%~tj).
- Das Datum gibt mir auch die Uhrzeit dazu aus. Daher habe ich in Zeile 18 einfach die letzten 7 Zeichen des Strings abgeschnitten.
- Das Problem mit dem Dateinamen habe ich in Zeile 20,21,22 gelöst, indem ich einfach fest die ersten 3 und die letzten 4 Zeichen abschneide. Das ist natürlich höchst statisch (doof).
Jetzt meine Frage:
Wie muss ich dieses Script anpassen, damit es 1. auch mit beliebigen Pfaden funktioniert und 2. mir auch die anderen Datum der Datei ausgibt?
@echo off & setlocal
If "%*"=="" (echo Syntax: %~n0 [Lw:\Pfad\] Dateiname ^(Wildcards erlaubt^) && goto :eof)
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 Replace(Replace(objFile.Version,",",".")," ",""): Next>>"%GetV%"
For %%i in (%*) do call :getSpecs "%%i"
del "%GetV%" & goto :eof
:getSpecs
set "Version=" & for /f %%i in ('cscript //nologo "%GetV%" "%~1"') do set "Version=%%i"
for /f "delims=" %%j in ('dir %1 /s /b /a-d') do set filedate=%%~tj
set filedate=%filedate:~0,-7%
set filename=%~1
set filename=%filename:~0,-4%
set filename=%filename:~3%
if defined Version echo %filename%;%filedate%;%Version% >> c:\version.log
Dies ist kein dringliches Problem, ich kann mit dem Skript ja händisch das Ziel erreichen. Dennoch würde ich mich freuen, wenn Verbesserungsvorschläge kommen, insbesondere bzgl. des Datums. Herzlichen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120604
Url: https://administrator.de/contentid/120604
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Zeile 20 bis 22 kannst du so zusammenfassen:
Erstellung:
set filename=%~n1
Das mit dem Datum kannst du so aufdröseln:Erstellung:
for /f "delims=" %%j in ('dir %1 /s /b /a-d /tc') do set filedate=%%~tj
Letzter Zugriff:for /f "delims=" %%j in ('dir %1 /s /b /a-d /ta') do set filedate=%%~tj
Letzter Schreibzugriff:for /f "delims=" %%j in ('dir %1 /s /b /a-d /tW') do set filedate=%%~tj
Das steht nicht in der hilfe zum set sondern zu for (for /?) ziemlich am ende beschreiben.
Das war von mir ungetestet.
So sollte es auf jeden fall gehen:
bzw. wenn du nicht nur Datum sondern auch die Uhrzeit dazu willst dann:
Das war von mir ungetestet.
So sollte es auf jeden fall gehen:
set "filedate1="
set "filedate2="
set "filedate3="
for /f "skip=5 delims= " %%j in ('dir "%~1" /tc') do if not defined filedate1 set filedate1=%%j
for /f "skip=5 delims= " %%j in ('dir "%~1" /ta') do if not defined filedate2 set filedate2=%%j
for /f "skip=5 delims= " %%j in ('dir "%~1" /tw') do if not defined filedate3 set filedate3=%%j
set "filedate1="
set "filedate2="
set "filedate3="
for /f "skip=5 tokens= 1,2 delims= " %%j in ('dir "%~1" /tc') do if not defined filedate1 set filedate1=%%j %%k
for /f "skip=5 tokens= 1,2 delims= " %%j in ('dir "%~1" /ta') do if not defined filedate2 set filedate2=%%j %%k
for /f "skip=5 tokens= 1,2 delims= " %%j in ('dir "%~1" /tw') do if not defined filedate3 set filedate3=%%j %%k