Zum Inhalt wechseln


Foto

Mit Batch File prüfen ob Datei vorhanden


  • Bitte melde dich an um zu Antworten
14 Antworten in diesem Thema

#1 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 16. Januar 2008 - 08:29

Hallo,

Ich häng gerade an einem Problem undzwar wird täglich eine Datei z.B. c:\test.txt erstellt. Manchmal besteht das Problem das die Datei nicht erstellt wurde und nur mit dem Datum von gestern vorhanden ist. Ich brauch also eine Prüfung die überprüft ob die Datei mit dem aktuellem Datum vorhanden.

In dem unteren Beispiel prüfe Ich leider nur auf die Datei und nicht ab das Erstellungsdatum. Gibt es hier einen Batch Befehl?

if exist C:\test.txt goto :JA
goto NEIN

:JA
echo JA >> c:\ja.txt
exit

:NEIN
echo NEIN >> c:\a\nein.txt
exit


Vielleicht hat jemand einen Tipp


Danke im Voraus

Gruss,
zoran

#2 humpi

humpi

    Board Veteran

  • 1.123 Beiträge

 

Geschrieben 16. Januar 2008 - 10:19

Hallo,
sollte so gehen:
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%b%%c%%d
if exist C:\test%CDATE%.txt goto :JA
Wenn dir etwas logisch erscheint, frag lieber nochmal nach.

#3 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 16. Januar 2008 - 11:58

Hallo,

Vielen Dank schonmal für die Antwort!!!

Jetzt habe ich noch ne Frage:

Kann man das auch so lösen das der Dateiname nicht verändert wird???



Danke

Gruss
Zoran

#4 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 17. Januar 2008 - 07:38

Hat vielleicht noch jemand einen Tipp???

#5 s.weinschenck

s.weinschenck

    Board Veteran

  • 543 Beiträge

 

Geschrieben 17. Januar 2008 - 07:59

Kannst Du die Datei wegkopieren bevor Du die neue Datei hinkopierst?
Wenn dann eine Datei da ist weisst Du ja das die aktuelle da ist.
Gib einem Mann einen Fisch und du ernährst ihn einen Tag,
zeige ihm wie man fischt und du ernährst ihn ein Leben lang...

#6 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 17. Januar 2008 - 10:39

Das Problem ist ich habe auf einem SQL Server folgende Jobs

1. Tabelleninhalt löschen
2. Daten der TXT Datei in Tabelle importieren

Das heisst wenn die TXT ausversehen durch das wegkopieren nicht mehr da sein sollte, ist das noch schlimmer wie wenn die Datei einen Tag alt wäre...

Weil die SQL Tabelle sonst leer bleiben würde...

#7 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 17. Januar 2008 - 11:58

Muss es Batch sein?
Mit VB-Script ginge es z.B. so:

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\")

for each file in folder.Files
   if (file.name = "test.txt") and (file.datelastmodified < Date()) then 
    strJaNein ="NEIN" 
  else 
    strJaNein = "JA"
  end if
next
'... Ausgabe von strJaNein nach belieben...

My name is Frank, you can say you to me.

#8 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 17. Januar 2008 - 12:04

Vielen dank für die ausführliche lösung!

das Problem mit VB kenne ich mich garnicht aus!!!
Deswegen wäre mir ein Batch File etwas lieber...

Hmm ich weiss echt net was ich noch probieren kann!!!

#9 humpi

humpi

    Board Veteran

  • 1.123 Beiträge

 

Geschrieben 17. Januar 2008 - 14:25

Hi,
dann schalte doch einen Ordner mit aktuellem Datum vor. Wenn der Ordner leer ist, ist eben keine .txt von heute da.
Wenn dir etwas logisch erscheint, frag lieber nochmal nach.

#10 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 17. Januar 2008 - 15:37

OK, dann'n Kompromiss:
Eine "testdatum.vbs":
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\")
for each file in folder.Files
  if file.name = "test.txt" then
    if file.datelastmodified < Date() then varExitCode = 0 else varExitCode = 1
  end if
next
WScript.Quit varExitCode
und eine "testdatum.bat", die aufgerufen wird:
@echo off
call wscript.exe testdatum.vbs
if %ERRORLEVEL%==0 goto NEIN
echo JA > test.log
goto END
:NEIN
echo NEIN > test.log
:end

My name is Frank, you can say you to me.

#11 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 18. Januar 2008 - 07:36

Was soll man sagen...außer

Perfekt
Super
Vielen Dank genau das habe Ich gesucht!!!

Danke für eure bemühungen


Gruss

#12 SilenZer

SilenZer

    Newbie

  • 42 Beiträge

 

Geschrieben 18. Januar 2008 - 08:17

Ich hab ne etwas andere frage zu dem Thema, ich habe folgende Aufgabenstellung:

Ich soll ein Script schreiben, welches überprüft, ob der User neue Daten erzeugt hat, wenn ja, sollen diesen auf einen Server Kopiert werden.

Anschließend soll der Transfer der Daten überprüft werden, sprich ob die Originaldateien mit den kopierten Dateien übereinstimmen. Ist dies alles erledigt soll eine Logfile erstellt werden und per E-Mail versendet werden.

Den leichten teil mit dem Kopieren habe ich mit einer Batch Datei gelöst und das funktioniert soweit.

Hier ist mein Quelltext, damit ihr seht wie weit ich bin:

@echo off
xcopy g:\test\*.* h:\safe /e/s/y/d
FOR /F "tokens=1,2 delims=:" %%d IN ('date /t') DO set dat=%%d
FOR /F "tokens=1,2 delims=:" %%i IN ('time /t') DO set zeit=%%i-%%j
rename h:\safe\safe "%dat%%zeit%.Safe"
FOR /F "skip=2 tokens=*" %%c IN ('DIR /O-D /B h:\safe\*safe') DO (rd h:\safe\"%%c" /s/q)
exit

erklärungen in ():
xcopy g:\test\*.* (Start) h:\safe (Ziel) /e/s/y/d (Parameter)
(kopiert das Startverzeichnis zum Zielverzeichnis)

FOR /F "tokens=1,2 delims=:" %%d IN ('date /t') DO set dat=%%d
(kreiert eine Variable "dat" = Datum)

FOR /F "tokens=1,2 delims=:" %%i IN ('time /t') DO set zeit=%%i-%%j
(kreiert eine Variable "zeit" = Uhrzeit)

rename h:\safe\safe "%dat%%zeit%.Safe"
(benennt das soeben kopierte Verzeichnis in "Datum Uhrzeit.Safe" um)

FOR /F "skip=2 tokens=*" %%c IN ('DIR /O-D /B h:\safe\*safe') DO (rd h:\safe\"%%c" /s/q)
(legt fest, dass nur die zwei neusten Verzeichnisse bleiben, und die älteren gelöscht werden. Details:
skip=2 = gibt an, dass die zwei neusten übersprungen werden
h:\safe\*Safe' = gibt die zu prüfenden Verzeichnisse an
rd h:\safe\"%%c" /s/q = das ist der Löschbefehl


Wenn mir jmd helfen könnte wäre ich euch sehr sehr verbunden. Sollte der Thread nicht passen, sagt es mir gleich :)

#13 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 18. Januar 2008 - 10:07

Ich würde sagen: Eigentlich solltest Du dafür einen eigenen, neuen Thread aufmachen ;)

Gibt es einen Grund, dass das per Script gemacht werden soll?
Eigentlich wäre das doch eine Aufgabe, die am einfachsten mit einer richtigen Datensicherungssoftware (Arcserve o.ä.) gemacht werden könnte. Verifizieren, Log verschicken... wären dort dann nur einfach anzuklickende Optionen.
My name is Frank, you can say you to me.

#14 Zoran

Zoran

    Member

  • 127 Beiträge

 

Geschrieben 22. Januar 2008 - 07:54

Jetzt muss ich doch noch eine Frage stellen:

undzwar habe ich auch eine Datei mit der Bezeichnung FA_Export.txt

kann das sein das das VB Skript ein Problem mit dem _ Zeichen hat???


Danke

#15 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 22. Januar 2008 - 08:07

Habs grad mal ausprobiert. Bei mir gibtst keine Probleme.
Der Dateiname ist ja in dem Script hart codiert. Wenn ich "test.txt" durch "FA_Export.txt" ersetzte, geht's bei mir nach wie vor.
Solltest Du noch mehr verschiedene Dateien haben, sollte man das hart codierte durch nen Übergabeparameter ersetzen. Sagts Bescheid, dann bieg ich's mal in ner freien Minute um.
My name is Frank, you can say you to me.