Προς το περιεχόμενο

Διάσπαση Καταλόγων (Split Folders)


Nikos_Vita

Προτεινόμενες αναρτήσεις

Δημοσ.

Kαλησπέρα σας,

 

Μάλλον δεν θα ξέρει κανείς τίποτα αλλά ας ρωτήσω...

 

Αναζητώ κάποιο λογισμικό που να διαιρεί folder (split folder) σε ξεχωριστά folder.

 

Εχω κάποια μεγάλα folder με πάρα πολλά αρχεία mp3 ...

Θέλω αυτόματα να μπουν αυτά τα αρχεία σε ξεχωριστά folder και να βάλω περιορισμο στον αριθμό των αρχείων ανά folder ...

 

Δύσκολα πράγματα ζητάω ε; :fear:

 

Αν κάποιος ξέρει κάτι ας το αναφέρει.

 

Ευχαριστώ

  • Απαντ. 35
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

Βάσει τί κριτηρίων θέλεις να γίνεται ο διαχωρισμός; Αν σου αρκεί μόνο ο περιορισμός αρχείων ανά folder, τότε γίνεται και με ένα batch file η δουλειά...

Δημοσ.
Βάσει τί κριτηρίων θέλεις να γίνεται ο διαχωρισμός; Αν σου αρκεί μόνο ο περιορισμός αρχείων ανά folder, τότε γίνεται και με ένα batch file η δουλειά...

 

Ναι.

 

Ο μόνος περιορισμός που θέλω είναι ο αριθμός αρχείων ανά folder. Θέλω σε κάθε folder να μπουν μέχρι 99 αρχεία.

 

Αλλά με το "batch file" πως γίνεται αυτό; :fear:

Δημοσ.

Χμμμ, ήμουν σίγουρος ότι θα είναι εύκολο, αλλά το παρακάτω δε δουλεύει όπως υπολόγιζα:

 

>
REM @echo off

set metrhths=0
set ypoloipo=0
set neoskatalogos=katalogos1
set postfix=1

for %%a in (*.mp3) do (
   set /a metrhths+=1
   set /a ypoloipo=%metrhths% %% 99
   if ypoloipo equ 0 (
       set /a postfix+=1
       set neoskatalogos=katalogos%postfix%
       mkdir %neoskatalogos%
   )
   mv "%%a" %neoskatalogos%
)

 

Βλέπει κανείς κάποιο λάθος... ;

Δημοσ.

Εγώ δυστυχώς δεν μπορώ να σε βοηθήσω. Δεν γνωρίζω από batch files...

 

Αν ξέρει κάποιος άλλος ας βοηθήσει...

Δημοσ.

οχι οτι δεν υπάρχει τίποτα. ενα βγαινει στα πρωτα γκουγλοαποτελεσματα, αλλα δεν ειναι δωρεάν.

http://www.batchconverter.com/FolderSplitterMega-download-58324.shtml

 

 

ενα δωρεάν, αλλα δεν το χωρίζει με αριθμό αρχείων, αλλα με βαση το μέγεθος

http://www.softforall.com/Utilities/FileDisk/Directory_Splitter09040570.htm

Δημοσ.
οχι οτι δεν υπάρχει τίποτα. ενα βγαινει στα πρωτα γκουγλοαποτελεσματα, αλλα δεν ειναι δωρεάν.

http://www.batchconverter.com/FolderSplitterMega-download-58324.shtml

 

 

ενα δωρεάν, αλλα δεν το χωρίζει με αριθμό αρχείων, αλλα με βαση το μέγεθος

http://www.softforall.com/Utilities/FileDisk/Directory_Splitter09040570.htm

 

Καλημέρα

Το 1ο πρόγραμμμα το DEMO το έχω δοκιμάσει και είναι ασταθές. Κόλλαγε όταν έβρισκε στα folder πολλά αρχεία (πάνω από 500) κατά τη διάρκεια του COPY. Είναι γραμμένο σε Visual Basic και μάλλον η εταιρεία ή ο τύπος που το έχει αναπτύξει το έχουν παρατήσει...

 

Το 2ο δεν το είχα πάρει είδηση, αλλά δεν μου κάνει αφού αναζητώ χωρισμό σε folder που να έχει ως περιορισμούς τον μέγιστο αριθμό αρχείων ανά folder και αλφαβητική ταξινόμηση... :fear:

Δημοσ.

Ορίστε μία πρώτη έκδοση από ένα πρόχειρο VBScript που σκάρωσα και κάνει (hopefully) αυτό που ζητάς:

 

 

 

>
' DivideMP3s.vbs
' Author: parsifal
' Does not support files with non-latin characters in filename


Option Explicit

Dim StartFolder, Prefix, Postfix, Limit, ObjShell, ObjFolder, ObjFSO, Counter, NextFolderBaseName, NextFolderName, ObjFolderNew, NextFile, FileToMove

StartFolder = InputBox("Provide a full path (e.g. E:\Files\Music\MyFolder):", "Enter Base MP3 folder")
Prefix = InputBox("Created folders' name will start with:", "Output folders prefix")
Postfix = 1
Limit = InputBox("Number of MP3s in each folder:", "Output folders' files limit")
Limit = CInt(Limit)

Set ObjShell = CreateObject("Shell.Application")
Set ObjFolder = ObjShell.Namespace(StartFolder)
Set ObjFSO = CreateObject("Scripting.FileSystemObject")

Counter = 0
NextFolderBaseName = StartFolder & "\" & Prefix
NextFolderName = NextFolderBaseName & Postfix
Set ObjFolderNew = ObjFSO.CreateFolder(NextFolderName)

For Each NextFile in ObjFolder.Items
If Counter = Limit Then
	Postfix = Postfix + 1
	NextFolderName = NextFolderBaseName & Postfix
	Set ObjFolderNew = ObjFSO.CreateFolder(NextFolderName)
	Counter = 0
End If

Set FileToMove = ObjFSO.GetFile(StartFolder & "\" & NextFile)
FileToMove.Move(NextFolderName & "\" & NextFile)

Counter = Counter + 1
Next

WScript.Quit

 

 

Και σε συνημμένο αρχείο TXT (πρέπει να γίνει rename με κατάληξη .vbs για να εκτελεστεί με διπλό κλικ): DivideMP3s.txt

 

 

Σημειώσεις:

  • Δεν υποστηρίζει ακόμη αρχεία με ελληνικούς χαρακτήρες στο filename. Υποστηρίζει όμως καταλόγους που περιέχουν στο πλήρες path ελληνικούς χαρακτήρες
  • Είναι η πρώτη μου προσπάθεια σε VB scripting, γι' αυτό μη βαράτε!
  • Λόγω του προηγουμένου, το εκτελείτε με δική σας ευθύνη. Ουδεμία ευθύνη φέρω αν ανατινάξει το PC σας ή αν φάει το κατοικίδιό σας!
  • Από μερικές δοκιμαστικές εκτελέσεις, φάνηκε να λειτουργεί ικανοποιητικά (εκτός των ελληνικών filenames) και με καλή ταχύτητα
  • Το script δεν τερματίζεται κανονικά, στην τελευταία επανάληψη του For Each loop η iteration variable μάλλον παίρνει κάποια τιμή που δεν προέβλεψα

 

 

Μερικά screenshots:

 

post-4351-12906300778_thumb.png

post-4351-129063007807_thumb.png

post-4351-12906300781_thumb.png

Δημοσ.

Καλήσπερα και σε ευχαριστώ.

 

Δυστυχώς το scipt έτρεξε μόνο μία φορά. Τις επόμενες φορές βγάζει error...

Δημοσ.

Αν τις επόμενες φορές που το τρέξεις, εισάγεις στο 1ο και στο 2ο dialog box ακριβώς τα ίδια με την 1η εκτέλεση (έστω D:\MyMP3s και newfolder αντίστοιχα), προσπαθεί να δημιουργήσει τον κατάλογο D:\MyMP3s\newfolder1 (newfolder2, κ.ο.κ.). Αν αυτοί οι κατάλογοι υπάρχουν ήδη από προηγούμενες εκτελέσεις (δεν τους έχεις αλλάξει όνομα ή δεν τους έχεις μετακινήσει αλλού), τότε η εκτέλεση θα αποτυγχάνει. Ιδανικά, θα πρέπει το base folder που δίνεις να περιέχει μόνο MP3s με λατινικά filenames και καθόλου υποκαταλόγους.

 

Sorry, είναι η πρώτη μου προσπάθεια και το script έχει πραγματικά μηδαμινά επίπεδα error checking. Ίσως σκαρώσω κάτι καλύτερο και πιο robust (πιθανόν και crossplatform) σε C, όταν βρω λίγο χρόνο!

Δημοσ.

Σε ευχαριστώ πολύ για όλα!...! Πραγματικά έχω μείνει έκπληκτος!

 

Θα το δοκιμάσω αμέσως τώρα!...!

 

---------- Το μήνυμα προστέθηκε στις 19:50 ----------

 

Βγάζει πάλι το ίδιο error:

 

Script: D:\_tmp\DivideMP3s.vbs

Line: 33

Char: 2

Error: File not found

Code: 800A0035

Source: Microsoft VBScript runtime error

Δημοσ.

Η δουλειά έγινε όμως; Ο βασικός κατάλογος που εισήγαγες στο 1ο dialog box είναι πλέον άδειος από αρχεία (τα οποία έχουν μετακινηθεί στους υποκαταλόγους που δημιούργησε το script); Λίγο πιο πάνω έγραψα το εξής:

 

Το script δεν τερματίζεται κανονικά, στην τελευταία επανάληψη του For Each loop η iteration variable μάλλον παίρνει κάποια τιμή που δεν προέβλεψα
Δημοσ.

όχι δυστυχώς δεν κάνει το split.

Το error το βγάζει κατευθείαν. Φτιάχνει το 1ο folder το αφήνει άδεια και τελικά δεν κάνει το split....

Δημοσ.

Έκανα μία μικρή διορθωσούλα, τώρα το script δημιουργεί τους νέους υποκαταλόγους ένα επίπεδο πιο πάνω από τον base folder που εισάγουμε στο 1ο dialog box (το οποίο λύνει και το πρόβλημα με τις invalid τιμές στο for-each loop). Μάλλον η δημιουργία των υποκαταλόγων στον base folder όσο το script τρέχει δημιουργούσε το πρόβλημα:

 

 

 

>
' DivideMP3s.vbs
' Author: parsifal
' Does not support files with non-latin characters in filename


Option Explicit

Dim StartFolder, Prefix, Postfix, Limit, ObjShell, ObjFolder, ObjFSO, Counter, NextFolderBaseName, NextFolderName, ObjFolderNew, NextFile, FileToMove

StartFolder = InputBox("Provide a full path (e.g. E:\Files\Music\MyFolder):", "Enter Base MP3 folder")
Prefix = InputBox("Created folders' name will start with:", "Output folders prefix")
Postfix = 1
Limit = InputBox("Number of MP3s in each folder:", "Output folders' files limit")
Limit = CInt(Limit)

Set ObjShell = CreateObject("Shell.Application")
Set ObjFolder = ObjShell.Namespace(StartFolder)
Set ObjFSO = CreateObject("Scripting.FileSystemObject")

Counter = 0
NextFolderBaseName = StartFolder & "\..\" & Prefix
NextFolderName = NextFolderBaseName & Postfix
Set ObjFolderNew = ObjFSO.CreateFolder(NextFolderName)

For Each NextFile in ObjFolder.Items
If Counter = Limit Then
	Postfix = Postfix + 1
	NextFolderName = NextFolderBaseName & Postfix
	Set ObjFolderNew = ObjFSO.CreateFolder(NextFolderName)
	Counter = 0
End If

Set FileToMove = ObjFSO.GetFile(StartFolder & "\" & NextFile)
FileToMove.Move(NextFolderName & "\" & NextFile)

Counter = Counter + 1
Next

WScript.Quit

 

 

 

.

DivideMP3s.zip

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...