Etherovamon Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Καλησπέρα σε όλους! Αν γνωρίζει κάποιος καλά από .bat θα μου ήταν πολύτιμη η συμβουλή του. Τον τελευταίο καιρό δουλεύω αρκετά τα αρχεία bat με τις απλές εντολές συνήθως (π.χ. xcopy). Θέλω να χρησιμοποιήσω για ένα bat μου την εντολή if then αλλά όσο κι αν μελέτησα κάποια tutorials, δεν έβγαλα άκρη.. Θέλω συγκεκριμένα να ορίσω: Εάν μέσα σε έναν φάκελο το bat βρει το αρχείο file1.exe με όγκο πάνω από 100ΜΒ, τότε να το μεταφέρει σε έναν άλλο συγκεκριμένο φάκελο (π.χ. από τον folder1 στον folder2). Γνωρίζει κάποιος μήπως πώς θα διαμορφώσω το if then; Ευχαριστώ προκαταβολικά.
Bspus Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Καταρχην ενα χρησιμο site για τετοιου ειδους αναζητησεις http://ss64.com/ Για την ακριβη συνταξη του bat θα πρεπει αν ξερουμε σε τι windows θα τρεξει γιατι ετσι οπως θα το εκανα εγω τουλαχιστον θα χρησιμοποιει στοιχεια που αλλαζουν με τη γλωσσα και πιθανως με την εκδοση. Οριστε ενα παραδειγμα σε αγγλικα windows 8.1 Τα ^ στο bat ειναι escape characters. Βαζοντας ^ μπροστα απο ενα χαρακτηρα λεμε στον interpreter να τον μεταχειριστει ως απλο text και οχι ως κανονικο | η παρενθεσεις @echo offfor /F "tokens=3" %%a in ('dir file1.exe /-C ^| findstr File^(s^)') do set /a filesize=%%aif %filesize% GEQ 100000000 ( echo file is larger than 100megs echo do something) else ( echo file is smaller than 100megs echo do something else)pause Η πρωτη γραμμη ειναι βεβαια ολο το ζουμι. Για να καταλαβεις τι κανει τρεξε πρωτα dir file1.exe /-C Σου δειχνει το αρχειο file1.exe και στην τελευταια γραμμη περιεχει την ακολουθια File(s) η οποια εχει και το τελικο μεγεθος. Το τελικο μεγεθος ειναι το μεγεθος του file1.exe γιατι του λεμε να δειξει μονο αυτο ετσι και αλλιως. Το /-C ειναι για να εχει το size μονοκομματο νουμερο και οχι με κομματα ενδιαμεσα dir file1.exe /-C | findstr File(s) Το ιδιο με πριν αλλα αυτη τη φορα σου δειχνει μονο τη γραμμη που περιεχει την ακολουθια File(s) for /F "tokens=3" %%a in ('dir file1.exe /-C ^| findstr File^(s^)') do set /a filesize=%%a Στο for παιρνουμε το 3ο token απο το output της γραμμης (τα tokens by default ξεχωριζουν με βαση το space, αρα την τριτη "λεξη") που ειναι το μεγεθος σε Bytes και το αναθετουμε στη μεταβλητη filesize με set /a ωστε να μπορουμε να κανουμε και πραξεις με αυτο
Etherovamon Δημοσ. 9 Μαρτίου 2015 Μέλος Δημοσ. 9 Μαρτίου 2015 Να ΄σαι καλά για την ανταπόκριση. Κάποιες ερωτησούλες μόνο: 1) Σε ποιο σημείο θα ορίσω την ακριβή διαδρομή του exe στον υπολογιστή μου (win 7 32 greek) και των δύο φακέλων ανάμεσα στους οποίους θα γίνει η μεταφορά; 2) Αν πρόκειται για gb, γράφω gigs; 3) στο πεδίο do something μπορώ να ορίσω τη μεταφορά του αρχείου από τον έναν φάκελο στον άλλο με την απλή εντολή; 4) Tο τελευταίο σκέλος (smaller) μπορώ να το διαγράψω στην περίπτωση που δεν το χρειάζομαι;
TheELF Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Γίνεται και ποιο απλά @echo off SET FILESIZE=%~z1 IF %FILESIZE% LSS 100000000 Goto :EOF Εδώ οι εντολή αντιγραφής pause GOTO :EOF το αποθηκεύεις σαν onoma.bat και το τρέχεις μαζί με το όνομα αρχείου που θες να ελέγξεις/αντιγράψεις π.χ. onoma.bat enlogoarxeio.xxx 1)το ποιο ασφαλές είναι να γράφεις πάντα την πλήρες διαδρομή. 2)πρέπει πάντα να γράφεις όλα τα bytes κάνε δεξί κλικ σε ένα αρχείο και πάνε στης ιδιότητες,στο μέγεθος το νούμερο που είναι στην παρένθεση είναι αυτό που θες. 3)ναι απλά του λες να κάνει την αντιγραφή,βέβαια καλό θα ήταν να γινόταν και κάνας έλεγχος για το αν υπάρχει ήδη τέτοιο αρχείο ή όχι.
Etherovamon Δημοσ. 9 Μαρτίου 2015 Μέλος Δημοσ. 9 Μαρτίου 2015 Γίνεται και ποιο απλά το αποθηκεύεις σαν onoma.bat και το τρέχεις μαζί με το όνομα αρχείου που θες να ελέγξεις/αντιγράψεις π.χ. onoma.bat enlogoarxeio.xxx 1)το ποιο ασφαλές είναι να γράφεις πάντα την πλήρες διαδρομή. 2)πρέπει πάντα να γράφεις όλα τα bytes κάνε δεξί κλικ σε ένα αρχείο και πάνε στης ιδιότητες,στο μέγεθος το νούμερο που είναι στην παρένθεση είναι αυτό που θες. 3)ναι απλά του λες να κάνει την αντιγραφή,βέβαια καλό θα ήταν να γινόταν και κάνας έλεγχος για το αν υπάρχει ήδη τέτοιο αρχείο ή όχι. 1) Δηλαδή αν το αρχείο που με ενδιαφέρει λέγεται file1.exe το bat μπορώ να το ονομάσω onoma.bat file1.exe; 2) Για ποιο λόγο πρέπει να ξέρω το ακριβές μέγεθος του αρχείου που με ενδιαφέρει εφόσον θέλω να βάλω γενικό πλαφόν τα 100mb για το συγκεκριμένο αρχείο; π.χ.: Αν το file.exe είναι 101mb να μεταφερθεί. Αν είναι 99mb, να μείνει στον φάκελο ως έχει
TheELF Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Το bat θα ονομάζεται έστω onoma.bat όταν θα το τρέχεις θα γράψεις μετά το όνομα του bat και το όνομα του αρχείου που θες να ελέγξεις. (Ή φτιάξε ένα άλλο bat που θα το τρέχει αυτόματα με το όνομα αρχείου που θες) 2)Δεν χρειάζεται να το ξέρεις απλά σου το είπα για να δεις με τι μορφή βλέπουν το μέγεθος τα windows. Πρέπει να γράφεις ολόκληρο το νούμερο σε byte.
Bspus Δημοσ. 10 Μαρτίου 2015 Δημοσ. 10 Μαρτίου 2015 Να ΄σαι καλά για την ανταπόκριση. Κάποιες ερωτησούλες μόνο: 1) Σε ποιο σημείο θα ορίσω την ακριβή διαδρομή του exe στον υπολογιστή μου (win 7 32 greek) και των δύο φακέλων ανάμεσα στους οποίους θα γίνει η μεταφορά; 2) Αν πρόκειται για gb, γράφω gigs; 3) στο πεδίο do something μπορώ να ορίσω τη μεταφορά του αρχείου από τον έναν φάκελο στον άλλο με την απλή εντολή; 4) Tο τελευταίο σκέλος (smaller) μπορώ να το διαγράψω στην περίπτωση που δεν το χρειάζομαι; Ωπα! 1) εκει που γραφω dir file1.exe εσυ θα βαλεις το full path. Πχ dir c:\folder\file1.exe Αλλα αν το bat το τρεχεις εκει που βρισκεται το αρχειο αρκει το ονομα του αρχειου 2) Τα echo που εχω βαλει ειναι απλως για παραδειγμα. Εσυ θα βαλεις τις δικες σου εντολες που υπεθεσα οτι ξερεις ποιες θα ειναι Αν το τρεξεις οπως το γραφω δεν θα κανει κατι χρησιμο. Echo ειναι απλως για να γραψει στην οθονη το κειμενο που ακολουθει μετα το echo 3) η εντολη ειναι move. Αν το bat βρισκεται στον ιδιο φακελο τοτε move file1.exe c:\folder2 Υποθετοντας οτι θες να τον πας στο c:\folder2 4) Μπορεις να διαγραψεις ολο το else σκελος Παντως θα θελει πειραματισμο απο τη μερια σου και αν κρινω απο τις ερωτησεις σου δεν πρεπει να εχεις καθολου εμπειρια απο bat και αυτο δυσκολευει πολυ τα πραγματα Μονο και μονο οτι εχεις ελληνικα για παραδειγμα σημαινει οτι δεν θα δουλεψει γιατι στα ελληνικα το File(s) στο οποιο βασιζεται το script μου δεν υπαρχει καθολου. Θα υπαρχει κατι αλλο στα ελληνικα με το οποιο πρεπει αν το αντικαταστησεις (και να βρεις πως θα το γραψεις στα ελληνικα χωρις προβλημα αναγνωρισης) Κανε αυτο που λεει ο theelf. Αν το ηξερα πριν και εγω αυτο θα εγραφα!
Etherovamon Δημοσ. 10 Μαρτίου 2015 Μέλος Δημοσ. 10 Μαρτίου 2015 Παντως θα θελει πειραματισμο απο τη μερια σου και αν κρινω απο τις ερωτησεις σου δεν πρεπει να εχεις καθολου εμπειρια απο bat και αυτο δυσκολευει πολυ τα πραγματα Μονο και μονο οτι εχεις ελληνικα για παραδειγμα σημαινει οτι δεν θα δουλεψει γιατι στα ελληνικα το File(s) στο οποιο βασιζεται το script μου δεν υπαρχει καθολου. Θα υπαρχει κατι αλλο στα ελληνικα με το οποιο πρεπει αν το αντικαταστησεις (και να βρεις πως θα το γραψεις στα ελληνικα χωρις προβλημα αναγνωρισης) Μέχρι στιγμής δουλεύω πάρα πολύ τις απλές εντολής μιας γραμμής (αντιγραφής, επικόλλησης, μετακίνησης, backup κτλ). Με άγχωσες με τα ελληνικά. Εάν ξεκινώντας βάλω κάτω από το @echo off το chcp 1253 δε θα δουλέψει η εντολή;
Bspus Δημοσ. 10 Μαρτίου 2015 Δημοσ. 10 Μαρτίου 2015 Πρεπει να καταλαβαινεις τι κανει η καθε εντολη για να μην εχεις προβλημα Ειδικα την εντολη dir file1.exe /-C | findstr File(s) Παιρνει το αποτελεσμα του dir file1.exe /-C το περναει στην εντολη findstr μεσω του | (pipe) H findstr με την παραμετρο File(s) ψαχνει τα αποτελεσματα για την ακολουθια File(s) και επιστρεφει μονο τις γραμμες που το περιεχουν Η ελληνικη εκδοση στο cmd μπορει να γραφει τη λεξη Αρχεια αντι για File(s), οποτε δεν ειναι λογικο να συνεχισει να δουλευει. Το λογικο ειναι να μην επιστρεψει τιποτα λοιπον αφου το File(s) δεν θα εμφανιζεται πουθενα. Το cmd εχει απο τις πιο στρυφνες γλωσσες script. Οχι γιατι ειναι δυσκολο αλλα γιατι ειναι... ανωμαλο. Μονο και μονο το γεγονος οτι αναγκαζομαι να φτιαξω for loop για να αναθεσω το αποτελεσμα εντολης σε μια μεταβλητη αρκει για να το δειξει Σου ξαναλεω, εφαρμοσε τη λυση του elf. Ειναι πολυ καλυτερη και κομψη
Etherovamon Δημοσ. 11 Μαρτίου 2015 Μέλος Δημοσ. 11 Μαρτίου 2015 Καταρχήν, σας ευχαριστώ όλους για τη βοήθειά σας. Δυστυχώς όμως με τα παραπάνω όσο κι αν παιδεύτηκα δεν έφτιαξα το .bat που ήθελα. Προς ενημέρωση όμως και των υπολοίπων που ίσως εκφράσουν κάποια αντίστοιχη απορία, η πρόταση που καρποφόρησε ήταν αυτή. Το .bat δούλεψε κανονικότατα και μάλιστα δεν χρειάστηκε να βρίσκεται στον ίδιο προορισμό με τα επίμαχα αρχεία.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα