100 010 000 Δημοσ. 23 Απριλίου 2007 Δημοσ. 23 Απριλίου 2007 Καλησπερα σε όλους σας, Έχω φτιάξει ένα μπατσάκι για να παίρνω κάποια αρχεία backup και θα ήθελα να φτιάξω μέσα στο ίδιο μια υπορουτίνα που θα ελέγχει την ημερομηνία δημιουργίας του αρχείου, έτσι ώστε να με παραπέμπει σε λάθος αν για καποιο λόγο δεν γίνει το backup. Όλοι οι καλοί................. χωράτε
Bspus Δημοσ. 23 Απριλίου 2007 Δημοσ. 23 Απριλίου 2007 Θα ελεγχει την ημερομηνια και θα τη συγκρινει με τη σημερινη ή με καποια αλλη γνωστη απο πριν? παραμετρικα? Πρεπει να γινεις λιγο πιο συγκεκριμένος. Δυσκολεύεσαι στη συνταξη της υπορουτίνας ή στο πως θα αποσπάσεις την ημερομηνία? Κατι για να σε βοηθησει να αρχισεις: for /f "tokens=1 delims= " %%f in ('dir ^| findstr readme.txt') do (echo %%f) for /f "tokens=2 delims= " %%f in ('echo %%date%%') do (echo %%f) Η πρωτη εντολη επιστρεφει την ημερομηνια του αρχειου readme.txt που βρισκεται στον ιδιο φακελο με το batch Η δευτερη επιστρεφει τη σημερινη ημερομηνια. Μπορεις να το κανεις παραμετρικο για τα αρχεια και να αποθηκευεις τις ημερομηνιες σε μεταβλητες για συγκριση Υποψην, αν τις τρεξεις σε γραμμη εντολων και οχι σε batch file, τα %% γινονται %
100 010 000 Δημοσ. 23 Απριλίου 2007 Μέλος Δημοσ. 23 Απριλίου 2007 Ας πουμε οτι το backup που θέλω να τρέξω είναι αυτό: "C:\program Files\winzip\wzzip" -a -p -r C:\BACKUP\BACKUP.zip "C:\Program Files\Ahead\*.*" copy C:\BACKUP\BACKUP.zip E:\BACKUP\BACKUP.zip c > τοπικός ε > flashaki ή external usb dsk θα ήθελα την ώρα που τρέχει και τελειώσει να κάνει έλεγχο με την ημερομηνία (γιατι ο φακελος και το .zip αρχείο πιθανό να υπάρχει και από χτές ή προχθές κ.λ.π.) και αφού τελειώσει να τσεκάρει μέσα στους φακέλλους των δίσκων αν η ημερομηνια είναι η σημερινή που τρέχω το backup, ειδάλλως να μου βγάλει λάθος. Δηλαδή τρέχω τώρα το μπατσάκι (23-4-07) και θέλω να τσεκάρει το date modified του αρχείου και αν δεν είναι ίδια ημερομηνία θα το στέλνω σε ρουτινίτσα που θα του λεω "μεγάλε... το backup δεν έγινε", κάτι σαν αυτό : CLS @ECHO THIS PROGRAM IS COPYRIGHTED BY * ------------------* @ECHO AND IT WILL BACKUP, ALL THE FILES THAT YOU NEED @ECHO FROM YOUR MACHINE, IN TO TWO LOCAL DRIVES @SET /P userchoice1=Select "y" or "n" to continue @IF "%userchoice1%"=="Y" GOTO USERAGREE1 @IF "%userchoice1%"=="y" GOTO USERAGREE1 @IF "%userchoice1%"=="N" GOTO USERAGREE2 @IF "%userchoice1%"=="n" GOTO USERAGREE2 :USERAGREE1 mkdir "E:\BACKUP" mkdir "C:\BACKUP" GOTO BACKUP :BACKUP "C:\program Files\winzip\wzzip" -a -p -r C:\BACKUP\BACKUP.zip "C:\Program Files\Ahead\*.*" copy C:\BACKUP\BACKUP.zip E:\BACKUP\BACKUP.zip GOTO ELSE :ELSE IF NOT EXIST C:\BACKUP\BACKUP.zip GOTO WRONGDRIVELETTER IF NOT EXIST E:\BACKUP\BACKUP.zip GOTO WRONGDRIVELETTER GOTO SUCCESS :USERAGREE2 CLS @ECHO THE BACKUP WAS CANCELLED BY USER - PRESS ANY KEY TO EXIT @PAUSE EXIT :WRONGDRIVELETTER CLS @ECHO * ATTENTION * THE DRIVE THAT YOU SELECTED FOR YOUR @ECHO BACKUP DOES NOT EXIST - PLEASE CONTACT YOUR TECHNICAL @ECHO SUPPORT ADMINISTRATOR, TEL: ******** @PAUSE EXIT :SUCCESS CLS @ECHO THE BACKUP WAS SUCCESFULLY DONE - PRESS ANY KEY TO EXIT @PAUSE EXIT Αλλα δε μου κάνει διότι οι φάκελλοι που δηλώνω να ψαξει αν υπάρχουν, μπορει να υπάρχουν από χτες, προχτές κ.λ.π. όπως ανέφερα, μόνο με σύγκριση ημερομηνίας μπορώ να είμαι σίγουρος. Tα αρχεία που ελέγχω είναι : (Με μικρές αλλαγές folder ή δίσκων) C:\BACKUP\BACKUP.zip E:\BACKUP\BACKUP.zip Ευχαριστώ εκ των προτέρων Υ.Γ θα ήθελα και μια σύνταξη για προγραμματισμένο backup σε συγκεκριμένη ώρα χωρίς σαφώς να το βαλω στα schedule tasks των windows
100 010 000 Δημοσ. 24 Απριλίου 2007 Μέλος Δημοσ. 24 Απριλίου 2007 Βασικά αν μπορώ να βοηθήσω στη κατανόηση μαλλον πρεπει να κάνω set date (ή κατι τεσπα) και μετα verify για να είμαι σίγουρος πως το backup έγινε ειδάλλως θα ανατρέχει σε μήνυμα λάθους. To πώς να το κάνω δε ξέρω
100 010 000 Δημοσ. 24 Απριλίου 2007 Μέλος Δημοσ. 24 Απριλίου 2007 Any help? ή μαλλον............. heeeeeeeeeeeeeeeeeeeeeelp meeeee:mrgreen:
Bspus Δημοσ. 24 Απριλίου 2007 Δημοσ. 24 Απριλίου 2007 Δεν μπορω να καταλαβω που δυσκολευεσαι. > "C:\program Files\winzip\wzzip" -a -p -r C:\BACKUP\BACKUP.zip "C:\Program Files\Ahead\*.*" Αυτη η εντολη παντα θα φτιαχνει ενα αρχειο με τη σημερινη ημερομηνια. Μπορεις πριν την τρεξεις να σβησεις και το προηγουμενο C:\BACKUP\BACKUP.zip για σιγουρια. Δεν υπαρχει κανενας λογος να τη συγκρινεις με τη σημερινη Αν θες να συγκρινεις το backup.zip του e: και του c: για ημερομηνιες, τοτε με τον τροπο που σου εδειξα μπορεις να αποθηκευσεις τις ημερομηνιες τους σε μεταβλητες. πχ > for /f "tokens=1 delims= " %%f in ('dir c:\backup\backup.zip ^| findstr backup.zip') do (set cdate=%%f) for /f "tokens=1 delims= " %%f in ('dir e:\backup\backup.zip ^| findstr backup.zip') do (set edate=%%f) πριν τα κανεις αυτα μπορεις να εχεις ελεγξει οτι υπαρχει το drive e: και το backup.zip εκει μεσα. Τα cdate, edate θα πρεπει να ειναι απλα strings οποτε με ενα απλο IF ελεγχεις αν ειναι ομοια. Αν δεν ειναι, το e:\backup.zip ειναι σιγουρα πιο παλιο. Ελπιζω αυτο να ξεκαθαρισε λιγο τα πραγματα. Αν οχι, μαλλον κατι ακομα δεν εχω καταλαβει καλα.
100 010 000 Δημοσ. 25 Απριλίου 2007 Μέλος Δημοσ. 25 Απριλίου 2007 Φίλε σε ευχαριστώ και πάλι για την απάντηση, αλλα δυσκολεύομε λίγο στη σύνταξη γιατί είμαι σχετικά καινούργιος..... @echo off :: variables set drive=C:\BACKUP set drive=E:\BACKUP set date="%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%" Εδώ τώρα αν βάλω IF NOT EXIST στο date θα μου βγάλει λάθος. Πως να κάνω SET την ημερομηνία η οποία ανανεώνετε μόνη της καθε μερα? Αν μπορεις δώσε μου όλη τη σύνταξη σύμφωνα με αυτο το backup που έχω γράψει Ευχαριστώ εκ των προτέρων
citizen Δημοσ. 25 Απριλίου 2007 Δημοσ. 25 Απριλίου 2007 set drive=C:\BACKUP set drive=E:\BACKUP Στην ιδια μεταβλητή (drive) ξανααποδίδεις τιμή. Μετα την εκτέλεση πάντα θα εχει τη δευτερη τιμη set date="%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%" Μην αλλάζεις τη μεταβλητη DATE. Αν θελεις μια άλλη μοργή εμφανισης στη date βάλε νεα μεταβλητη πχ set mydate=%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%
100 010 000 Δημοσ. 26 Απριλίου 2007 Μέλος Δημοσ. 26 Απριλίου 2007 Σε ευχαριστώ φίλε.... ασε τα set drives, θα τη βρώ την άκρη, αυτό που θέλω να κάνω είναι το μπατσάκι που τρέχει σε schedule task καθε μέρα, να ελεχγει την ημερομηνία του εκάστοτε αρχείου ( π.χ. c:\backup\ahead.zip ) που δημιουργείτε και αν δε συμφωνεί με την εκάστοτε σημερινή, να με πηγαίνει σε λάθος. Δηλαδή τρέχει σήμερα 26/4/07 και μετά πρέπει να ελέξει το date modified του ahead.zip που υπάρχει ήδη από προηγούμενα backup και αν δεν είναι ίδια η ημερομηνία (π.χ. 25/4/07), να με πάει σε λάθος. Το να το σβήνω και να το δημιουργώ πάλι όπως είπε ο Bspus δεν το θεωρώ και πολύ ασφαλές γιαυτό θέλω να το συγκρίνω πάντα με την ημερομηνία, αλλά δε μπορω να το συντάξω και θέλω βοήθεια. Ευχαριστώ
citizen Δημοσ. 26 Απριλίου 2007 Δημοσ. 26 Απριλίου 2007 "C:\program Files\winzip\wzzip" -a -p -r C:\BACKUP\BACKUP.zip "C:\Program Files\Ahead\*.*" copy C:\BACKUP\BACKUP.zip E:\BACKUP\BACKUP.zip set file1="C:\BACKUP\BKP_%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%.zip" set file2="E:\BACKUP\BKP_%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%.zip" και τις παραπάνω εντολές καντες "C:\program Files\winzip\wzzip" -a -p -r %file1% "C:\Program Files\Ahead\*.*" copy %file1% %file2% και για πολυτέλεια αν θελεις βάζεις if not exist %file2% goto .......... YΓ. Το προγραμμα σου θαχει πρόβλημα αν δεν είναι συνδεδεμένο το flash-ακι ΥΓ2. Τρέξε πρωτα ενα δοκιμαστικό bat με τις εντολές set file1="C:\BACKUP\BKP_%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%.zip" set file2="E:\BACKUP\BKP_%date:~0,3%_%date:~12,2%-%date:~7,2%-%date:~4,2%.zip" echo %file1% echo %file2% για να δεις αν σου κανουν τα ονόματα των αρχείων ...
dpolal Δημοσ. 26 Απριλίου 2007 Δημοσ. 26 Απριλίου 2007 Αντί να παιδεύεσαι έτσι γιατί δεν ψάχνεις λίγο τις παραμέτρους του winzip έτσι ώστε όταν πάει να συμπιέσει τα αρχεία μέσα σε ένα .zip και αυτά υπάρχουν ήδη εκεί να τσεκάρει την ημερομηνία τους. Αν το backup.zip υπάρχει τότε τρέξε την εντολή που θα συμπιέσει με παράμετρο ελέγχου ημερομηνίας των αρχείων. Αν δεν υπάρχει τότε θα το φτιάχνει. Αν κατάλαβα καλά τώρα ότι θέλεις να κάνεις κάτι τέτοιο.
citizen Δημοσ. 26 Απριλίου 2007 Δημοσ. 26 Απριλίου 2007 Σωστος ! (To winzip δεν το ξερω αλλά και το winrar εχει παραμετρους για ημέρα και ωρα ...)
dpolal Δημοσ. 29 Απριλίου 2007 Δημοσ. 29 Απριλίου 2007 Αν δυσκολεύεσαι με το winzip, προσωπικά δεν γνωρίζω καθόλου τις παραμέτρους του όταν τρέχει από command line, προτίμησε και το παλιό καλό και αειθαλές pkzip...
100 010 000 Δημοσ. 1 Μαΐου 2007 Μέλος Δημοσ. 1 Μαΐου 2007 Παιδιά ευχαριστώ για τη βοήθεια, αλλά..... α) Ο τρόπος που μου λέει να κανω SET o citizen, ελέγχει μόνο τη συγκεκριμένη μέρα που κάνει set date και χρειάζετε να επεμβαίνω στο batch κάθε μέρα και να αλλάζω τη μεταβλητή. Άρα δε μου κάνει. Χρειάζετε να ανανεώνετε μόνο του 7 ημέρες την εβδομάδα β) To wizzip έχει παράμετρο ελέγχου της ημερομηνίας ( -ο ), αλλά απλά σου ανακοινώνει στο ντοσικό παράθυρο που τρέχει ότι δε ταιριάζει η ημερομηνία και εξακολουθεί να τρέχει και να σου δείχνει ότι κάνει backup, ενώ στην ουσία δε κάνει. Δεν είναι πολύ ασφαλές γιατί εκεί που το έχω βάλει να τρέχει δεν το παρακολουθεί κανείς Γιαυτό έγραψα πιο πρίν ότι θέλω να το ελέχγω εγώ με IF NOT EXIST Υπάρχει τρόπος? τηνχ και πάλι
Eusebius Δημοσ. 1 Μαΐου 2007 Δημοσ. 1 Μαΐου 2007 Ακόμα δεν έχω καταλάβει τί θες να κάνεις... Γιατί δεν χρησιμοποιείς την εντολή update, αντί να φτιάχνεις από την αρχή το αρχείο και να το αντιγράφεις μετά πάνω στο άλλο; Νομίζω σου το είπαν και πιο πάνω. Με το 7-Zip και το φορμάτ 7Z δεν έχω κανένα πρόβλημα με την update (χρησιμοποιώ 7Z επειδή είναι πολύ πιο γρήγορο για ίδια συμπίεση και επειδή υποστηρίζει Unicode και μεγάλα archives). Εναλλάξ μπορείς να δοκιμάσεις κι αυτόν τον κάπως μαϊμουδίστικο τρόπο: Βάζε στο όνομα των ZIP την ημερομηνία, αφού την πάρεις πρώτα σε μορφή που μπαίνει σε όνομα αρχείου. Π.χ., σε ISO 8601. Από Τετ 02/05/2007 παίρνεις 20070502 έτσι: > set mydate=%date:~10,4%%date:~7,2%%date:~4,2% Και φτιάχνε τα αρχεία έτσι: backup-%mydate%.zip Πριν ξεκινήσεις το backup ή την αντιγραφή του backup, κάνε chdir και μετονόμασε το τελευταίο ZIP που θα υπάρχει από χθες ή προχθές ή παραπροχθές κλπ.: > ren backup-*.zip backup-*-oldbak.zip Στείλε το νέο backup στη θέση του με όνομα: backup-%mydate%.zip Κάνε έλεγχο αν υπάρχει το backup-%mydate%.zip εκεί που το έστειλες. Αν υπάρχει, σβήσε το backup-*-oldbak.zip. (Ή σβήσε το την επόμενη φορά, πριν μετονομάσεις το πιο πρόσφατο). Αλλιώς μήνυμα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.