Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Versionsnummer, Datum, Filename auslesen

Frage Entwicklung Batch & Shell

Mitglied: Viprex

Viprex (Level 1) - Jetzt verbinden

16.07.2009, aktualisiert 12:43 Uhr, 5945 Aufrufe, 4 Kommentare

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?

01.
@echo off & setlocal  
02.
 
03.
If "%*"=="" (echo Syntax: %~n0 [Lw:\Pfad\] Dateiname ^(Wildcards erlaubt^) &&  goto :eof)  
04.
set "GetV=%Temp%\GetV.vbs"  
05.
 
06.
echo Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")>"%GetV%"  
07.
echo Set colFiles=objWMIService.ExecQuery ("SELECT * FROM CIM_Datafile WHERE Name='"^&Replace(WScript.Arguments(0),"\","\\")^&"'")>>"%GetV%"  
08.
echo For Each objFile in colFiles: WScript.Echo Replace(Replace(objFile.Version,",",".")," ",""): Next>>"%GetV%"  
09.
 
10.
For %%i in (%*) do call :getSpecs "%%i"  
11.
del "%GetV%"  & goto :eof 
12.
 
13.
:getSpecs 
14.
set "Version=" & for /f %%i in ('cscript //nologo "%GetV%" "%~1"') do set "Version=%%i"  
15.
 
16.
for /f "delims=" %%j in ('dir %1 /s /b /a-d') do set filedate=%%~tj  
17.
 
18.
set filedate=%filedate:~0,-7% 
19.
 
20.
set filename=%~1 
21.
set filename=%filename:~0,-4% 
22.
set filename=%filename:~3% 
23.
 
24.
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!
Mitglied: miniversum
16.07.2009 um 18:39 Uhr
Zeile 20 bis 22 kannst du so zusammenfassen:
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
Bitte warten ..
Mitglied: Viprex
20.07.2009 um 09:42 Uhr
Herzlichen Dank für deine Antwort!

Zitat von miniversum:
Zeile 20 bis 22 kannst du so zusammenfassen:
> set filename=%~n1
Sehr geil. Magst du mir erzählen, wo ich diese Information finden kann? In der Hilfe von set /? Ich stehe immer wie blöde da und frage mich, wo ich sowas finden soll.

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
Funktioniert das bei dir? Ich bekomme bei allen 3 Zeilen das Erstellungsdatum ausgegeben? Wo habe ich den Fehler?


01.
@echo off & setlocal  
02.
 
03.
::Falls Aufruf der Batch ohne Parameter, Hinweis, wie die Batch korrekt in der Konsole aufzurufen ist 
04.
If "%*"=="" (echo Syntax: %~n0 [Lw:\Pfad\] Dateiname ^(Wildcards erlaubt^) &&  goto :eof)  
05.
:: Pfad von der Konsole abgreifen 
06.
set "GetV=%Temp%\GetV.vbs"  
07.
 
08.
:: VBS Teil - Script von Bastla und Biber 
09.
echo Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")>"%GetV%"  
10.
echo Set colFiles=objWMIService.ExecQuery ("SELECT * FROM CIM_Datafile WHERE Name='"^&Replace(WScript.Arguments(0),"\","\\")^&"'")>>"%GetV%"  
11.
echo For Each objFile in colFiles: WScript.Echo Replace(Replace(objFile.Version,",",".")," ",""): Next>>"%GetV%"  
12.
 
13.
:: Für jede Datei die Eigenschaften auslesen und wegloggen 
14.
For %%i in (%*) do call :getSpecs "%%i"  
15.
:: End of Script 
16.
del "%GetV%"  & goto :eof 
17.
 
18.
:: Eigenschaften der Datei auslesen 
19.
:getSpecs 
20.
 
21.
::Versionnummer 
22.
set "Version=" & for /f %%i in ('cscript //nologo "%GetV%" "%~1"') do set "Version=%%i"  
23.
::Erstellung 
24.
for /f "delims=" %%j in ('dir %1 /s /b /a-d /tc') do set filedate1=%%~tj 
25.
::Letzter Zugriff 
26.
for /f "delims=" %%k in ('dir %1 /s /b /a-d /ta') do set filedate2=%%~tk 
27.
::Letzter Schreibzugriff 
28.
for /f "delims=" %%l in ('dir %1 /s /b /a-d /tW') do set filedate3=%%~tl 
29.
:: Dateinameohne Pfad und Endung 
30.
set filename=%~n1 
31.
 
32.
::Log schreiben: Datei;Erstellungsdatum;Letzter_Zugriff;Letzter_Schreibzugriff;Versionsnummer 
33.
if defined Version echo %filename%;%filedate1%;%filedate2%;%filedate3%;%Version% >> c:\version_mitZeit.log
Bitte warten ..
Mitglied: miniversum
20.07.2009 um 12:47 Uhr
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:
01.
set "filedate1=" 
02.
set "filedate2=" 
03.
set "filedate3=" 
04.
for /f "skip=5 delims= " %%j in ('dir "%~1" /tc') do if not defined filedate1 set filedate1=%%j 
05.
for /f "skip=5 delims= " %%j in ('dir "%~1" /ta') do if not defined filedate2 set filedate2=%%j 
06.
for /f "skip=5 delims= " %%j in ('dir "%~1" /tw') do if not defined filedate3 set filedate3=%%j
bzw. wenn du nicht nur Datum sondern auch die Uhrzeit dazu willst dann:
01.
set "filedate1=" 
02.
set "filedate2=" 
03.
set "filedate3=" 
04.
for /f "skip=5 tokens= 1,2 delims= " %%j in ('dir "%~1" /tc') do if not defined filedate1 set filedate1=%%j %%k 
05.
for /f "skip=5 tokens= 1,2 delims= " %%j in ('dir "%~1" /ta') do if not defined filedate2 set filedate2=%%j %%k 
06.
for /f "skip=5 tokens= 1,2 delims= " %%j in ('dir "%~1" /tw') do if not defined filedate3 set filedate3=%%j %%k
Bitte warten ..
Mitglied: Viprex
20.07.2009 um 12:58 Uhr
Perfekt. Vielen lieben Dank für die tolle Hilfe! Klappt wunderbar. Pfade sind jetzt kein Problem mehr und auch die Dateieigenschaften bekomme ich, wie gewünscht. Klasse. Immer wieder großartig, wie hier geholfen wird. Danke!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...