yauhun
Goto Top

Kl. Frage: Log-File schreiben per Batch

Hey ihr Genies. =))

Ich habe ein kleines Problem beim Schreiben eines Logs:


( Unterschied nur in der ersten Zeile: )
Klappt, Log-File wird als *.txt unter gewünschtem Pfad und Namen abgelegt:

set log="C:\Users\%username%\Desktop\SarchThrough-Suche %date%.txt"  


for /F "delims=" %%i in ('dir /b /s "c:\%GesuchteDatei%" ^2^>Nul') do (  
	set "GefundenerPfad=ja"  
REM Ausgabe in cmd:
	echo Gesuchter Inhalt "%GesuchteDatei%" gefunden als "%%~nxi" unter "%%~dpi".  
REM Ausgabe zusätzlich im Log:
	echo Gesuchter Inhalt "%GesuchteDatei%" gefunden als "%%~nxi" unter "%%~dpi". > %log%  
    )

Klappt nicht, kein Log:

set log="C:\Users\%username%\Desktop\SarchThrough-Suche %date% (%time%).txt"  


for /F "delims=" %%i in ('dir /b /s "c:\%GesuchteDatei%" ^2^>Nul') do (  
	set "GefundenerPfad=ja"  
REM Ausgabe in cmd:
	echo Gesuchter Inhalt "%GesuchteDatei%" gefunden als "%%~nxi" unter "%%~dpi".  
REM Ausgabe zusätzlich im Log:
	echo Gesuchter Inhalt "%GesuchteDatei%" gefunden als "%%~nxi" unter "%%~dpi". > %log%  
  )

Sobald ich eine zweite Variable in den Titel der *.txt schreibe, bekomme ich:
„The filename, directory name, or volume label syntax is incorrect.”

Ich blicke da nicht durch. Ich habe andere gesehen, die zwei Variablen in den Dateinamen aufnehmen, z.B. %IP% und %date% aber ich kann nicht Datum und Zeit aufnehmen, weil incorrect Syntax?
Was ist die Logik dahinter?
Auch %GesuchteDatei% funktioniert im Dateinamen nicht, %%~nxi dafür schon.
Könnte mir jemand die Regel erklären, die vermutlich Variablen im Dateinamen zugrunde liegt?

Danke, LG,
Yauhun (schon wieder)

Content-ID: 319402

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

Ausgedruckt am: 24.11.2024 um 10:11 Uhr

colinardo
Lösung colinardo 28.10.2016 aktualisiert um 12:24:05 Uhr
Goto Top
Hallo Yauhun,
set log="C:\Users\%username%\Desktop\SarchThrough-Suche %date% (%time%).txt"
„The filename, directory name, or volume label syntax is incorrect.”
das liegt daran das %time% Doppelpunkte enthält welche in Dateinamen nicht erlaubt sind (illegales Zeichen). Also ersetzte diese z.B. durch Punkte oder Unterstriche.
set t=%time:~0,-3%
set t=%t::=_%
set log="C:\Users\%username%\Desktop\SarchThrough-Suche %date% (%t%).txt"   
Alternativ geht's auch so:
set "t=%time:~0,2%_%time:~3,2%_%time:~6,2%"  
set log="C:\Users\%username%\Desktop\SarchThrough-Suche %date% (%t%).txt"   
Mehr Infos zu String Manipulation kannst du bei DOSTips nachlesen:
http://www.dostips.com/DtTipsStringManipulation.php


Grüße Uwe
Yauhun
Yauhun 28.10.2016 um 13:02:24 Uhr
Goto Top
Hey Uwe,

danke, na klar, die Doppelpunkte. Manchmal sieht man den Wald vor lauter Bäumen nicht.
Das erklärt auch, warum ich nicht %GesuchteDatei% in den Dateinamen schreiben konnte - ich suche mit Wildcards im Programm, die logischerweise auch nicht in den Dateinamen gehören (?,*).
Meine Güte. Darauf hätte ich selbst kommen können! ^^;

In jedem Fall vielen Dank, auch für die schnelle Antwort. Super Sache.

Gruß
Yauhun
rubberman
Lösung rubberman 28.10.2016 aktualisiert um 13:54:14 Uhr
Goto Top
Hallo Yauhun.

Macht man natürlich trotzdem nicht so. Im allgemeinen wird die Ansicht im Explorer so eingestellt sein, dass nach Dateinamen sortiert angezeigt wird. (Ich gehe nicht davon aus dass du die Logs auf Dauer auf deinem Desktop liegen hast.) Dann sollte das Datum in der Reihenfolge yyyymmdd vorliegen. Dazu kommt noch, dass das Format von %date% und %time% mit gebietsabhängigen Einstellungen bestimmt wird.
Zieh dir die Information mit WMIC und bau dir deinen Timestamp. Dann musst du dir keine Gedanken machen.

@echo off &setlocal
for /f %%i in ('WMIC OS GET LocalDateTime /value') do for /f "tokens=2 delims==" %%j in ("%%i") do set "ldt=%%j"  

set "timestamp=%ldt:~,8%T%ldt:~8,6%"  
echo %timestamp%

:: oder
set "timestamp=%ldt:~,4%-%ldt:~4,2%-%ldt:~6,2%_%ldt:~8,2%-%ldt:~10,2%-%ldt:~12,2%"  
echo %timestamp%
pause
Grüße
rubberman