Top-Themen

Aktuelle Themen (A bis Z)

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, 6019 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 ..
Ähnliche Inhalte
Batch & Shell
Datum in Datei speichern und wieder auslesen
gelöst Frage von AndroxinBatch & Shell3 Kommentare

Moinsen, ich spiele gerade ein wenig mit der Powershell und Zeitstempeln rum: Zeitstempel mit Get-Date erstellen, als String in ...

Batch & Shell
Bestimmtes Datum von einem file auslesen - Linux
gelöst Frage von lapvikaBatch & Shell9 Kommentare

Hallo zusammen, ich möchte mir in Linux aus der /var/log/messages Dateiinhalte der letzten 24 Stunden anzeigen lassen, alles was ...

Windows Tools
Scan BarCode 2 Filename
gelöst Frage von CADastropheWindows Tools8 Kommentare

Betriebssystem: Win 7 / 64 Hallo zusammen, wir arbeiten gerade an eine ACCESS-Programm zur Unterstützung der Reparaturannahme unserer Werkstatt. ...

Batch & Shell
Anhand des Filename in Verzeichnis kopieren
Frage von rudolfkBatch & Shell3 Kommentare

Ich ersuche um Hilfe! Komme aus der BI-Umgebung und habe mit der Batch-Programmierung leider keine Erfahrung. Jetzt sollte ich ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 16 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 20 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...