schuralv
Goto Top

Datum per Batch auslesen und anzeigen

Hallo Leute ich hab mal eine Frage an euch.
Ich möchte per batch eine Datei in einem bestimmten Pfad suchen und das letzte Änderungsdatum der Datei ausgeben lassen.
Komme bis:

:start
CLS
@echo off
echo.
echo ##########################################
echo # Datei Suchen #
echo ##########################################
echo Gib Datei ein:
set /p dat=
echo Datei: %DAT%
dir \D\Daten\%DAT%.* > dat.txt
dir *.txt|findstr /i dat.txt
pause
goto start

dies gibt jedoch nur jedesmal das Datum des letzten zugriffes, also jedes mal das aktuelle Datum

back-to-topnoch einen zusatz wie 284 dat.txt der vorzugsweiße ausgeblendet werden sollte.


Bitte um Eure Mithilfe

Content-Key: 205529

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

Printed on: April 20, 2024 at 05:04 o'clock

Member: Endoro
Endoro Apr 24, 2013 at 05:56:56 (UTC)
Goto Top
Hallo Schuralv,

ich hatte mal ein Progrämmchen geschrieben, welches die unterschiedlichen Zeiten vom Verzeichniseintrag anzeigt und vergleicht.

  1. Normal: was zeigt "dir" ohne Parameter an
  2. Erzeugt [/TC]: wann wurde die Datei/der Ordner erzeugt
  3. Lesen [/TA]: wann gelesen
  4. Schreiben [/TW]: letzter Schreibzugriff

Das Script kann entweder mit einem der o.g. Parameter aufgerufen werden oder ohne. Abweichungen zur Anzeige ohne Parameter werden markiert.

Am Code kannst du sehen, wie solche Abfragen gestaltet werden können.

@echo off &setlocal
set "dirparms=/4 /TC /TA /TW"  

for %%a in (/4 /TC /TA /TW) do (
 for /f "tokens=1-3*" %%i in ('dir /ON %%a^| findstr /br [0-9]') do (  
	set "$files_%%a_%%l=%%l"  
	set "$dates_%%a_%%l=%%i"  
	set "$times_%%a_%%l=%%j"  
	)
)
call:formatLabel normal "Normal"  
call:formatLabel erzeugt "Erzeugt [/TC]"  
call:formatLabel lesen "Lesen [/TA]"  
call:formatLabel schreiben "Schreiben [/TW]"  
if not "%~1"=="" goto:%~1  

echo(%normal%%erzeugt%%lesen%%schreiben%
for /f "tokens=1*delims==" %%i in ('set $files_/4_') do (  
	setlocal enabledelayedexpansion
	if not "!$dates_/4_%%j!!$times_/4_%%j!"=="!$dates_/TC_%%j!!$times_/TC_%%j!" (set "TCflag=*") else set "TCflag= "  
	if not "!$dates_/4_%%j!!$times_/4_%%j!"=="!$dates_/TA_%%j!!$times_/TA_%%j!" (set "TAflag=*") else set "TAflag= "  
	if not "!$dates_/4_%%j!!$times_/4_%%j!"=="!$dates_/TW_%%j!!$times_/TW_%%j!" (set "TWflag=*") else set "TWflag= "  
	echo(!$dates_/4_%%j! !$times_/4_%%j!   !$dates_/TC_%%j! !$times_/TC_%%j!!TCflag!  !$dates_/TA_%%j! !$times_/TA_%%j!!TAflag!  !$dates_/TW_%%j! !$times_/TW_%%j!!TWflag!  %%j
	endlocal
)
goto:eof

:formatLabel
for /f "delims=:" %%i in ('^(echo(%~2^&echo(^)^|findstr /o $') do set /a len=%%i-3  
setlocal enabledelayedexpansion
for /l %%i in (%len%,1,18) do set "lf=!lf! "  
endlocal &set "%1=%~2%lf%  
exit /b

:tc
echo(%normal%  %erzeugt%
for /f "tokens=1*delims==" %%i in ('set $files_/4_') do (  
	setlocal enabledelayedexpansion
	if not "!$dates_/4_%%j!!$times_/4_%%j!"=="!$dates_/TC_%%j!!$times_/TC_%%j!" (set "flag=***") else set "flag=   "  
	echo(!$dates_/4_%%j! !$times_/4_%%j! !flag! !$dates_/TC_%%j! !$times_/TC_%%j! !flag! %%j
	endlocal
)
goto:eof

:ta
echo(%normal%  %lesen%
for /f "tokens=1*delims==" %%i in ('set $files_/4_') do (  
	setlocal enabledelayedexpansion
	if not "!$dates_/4_%%j!!$times_/4_%%j!"=="!$dates_/TA_%%j!!$times_/TA_%%j!" (set "flag=***") else set "flag=   "  
	echo(!$dates_/4_%%j! !$times_/4_%%j! !flag! !$dates_/TA_%%j! !$times_/TA_%%j! !flag! %%j
	endlocal
)
goto:eof

:tW
echo(%normal%  %schreiben%
for /f "tokens=1*delims==" %%i in ('set $files_/4_') do (  
	setlocal enabledelayedexpansion
	if not "!$dates_/4_%%j!!$times_/4_%%j!"=="!$dates_/TW_%%j!!$times_/TW_%%j!" (set "flag=***") else set "flag=   "  
	echo(!$dates_/4_%%j! !$times_/4_%%j! !flag! !$dates_/TW_%%j! !$times_/TW_%%j! !flag! %%j
	endlocal
)
goto:eof

endlocal

Ich habe das nur zum privaten Gebrauch gedacht, es erfüllt also keine wie auch immer gearteten professionellen Ansprüche. Viel Spass.


Gruss!
Member: Schuralv
Schuralv Apr 24, 2013 at 06:14:55 (UTC)
Goto Top
Vielen Dank für die schnelle Antwort.
Damit ich das richtig verstehe muss ich einfach dir mit /TW ergänzen?
also:

:start
CLS
echo off
echo.
echo ##########################################
echo # Datei Suchen #
echo ##########################################
echo Gib Datei ein:
set /p dat=
echo Datei: %DAT%
dir /TW \D\Daten\%DAT%.* > dat.txt
dir *.txt|findstr /i dat.txt
pause
goto start
Member: Endoro
Endoro Apr 24, 2013 at 06:25:10 (UTC)
Goto Top
Den Zwischenschritt mit "dat.txt" kannst du auch einsparen, zB.:

dir /TW file.txt | findstr /i file.txt
Member: Schuralv
Schuralv Apr 24, 2013 at 06:45:42 (UTC)
Goto Top
Jawohl super danke face-big-smile

kleine Frage noch
der gibt mir dann noch 0 file.txt aus rechts vom Datum, kann man das noch irgendwie ausblenden?
Member: Endoro
Endoro Apr 24, 2013 at 07:13:30 (UTC)
Goto Top
Du kannst den Befehl dazu einfach in eine Forschleife packen und dir den ersten Token ausgeben lassen (was standardmässig passiert):

for /f %%i in ('dir /TW file.txt ^| findstr /i file.txt') do echo %%i  

Gruss!
Member: Schuralv
Schuralv Apr 24, 2013 at 07:20:30 (UTC)
Goto Top
super face-smile das einzige was noch fehlt ist die uhrzeit face-smile dann wäre die Sache erledigt
Member: Endoro
Endoro Apr 24, 2013 at 07:26:32 (UTC)
Goto Top
Es kommt darauf an, welches Zeitformat du eingestellt hast. Bei den europäischen Formaten genügt der zweite Token. Wenn du ein Zeitformat mit "AM/PM" eingestellt hast, wirst du auch noch den dritten brauchen. Für Europa also:

for /f "tokens=1,2" %%i in ('dir /TW file.txt ^| findstr /i file.txt') do echo %%i %%j  

.. und für USA, Japan:
for /f "tokens=1-3" %%i in ('dir /TW file.txt ^| findstr /i file.txt') do echo %%i %%j %%k  


Gruss!
Member: Schuralv
Schuralv Apr 24, 2013 at 07:34:17 (UTC)
Goto Top
Der erste hat gereicht.
Ich danke dir vielmals für die Hilfe face-big-smile