2010-09-21 5 views
0

J'ai écrit le script suivant ci-dessous - Je ne suis pas tout à fait heureux avec le script que je pense qu'il pourrait être écrit d'une manière plus élégante et dynamique ...Javascript et ASP créer des dossiers dynamiques plus élégante

Je suis en utilisant ftp.exe pour transférer des fichiers de mon application vers un autre serveur.

Si la structure de dossiers n'existe pas sur le site Web. Je dois créer le dossier stucture ...

et de le faire de cette façon

mkdir folder1 
mkdir folder1/folder2 
mkdir folder1/folder2/folder3 

avec le script ci-dessous je Cater quelques longueurs folder mais pas illimitée ... donc la solution ne fonctionnera que jusqu'à à une certaine quantité de sub folders.

ftpmkdirlength = ftpmkdir.split('/').length-1 
var i=0; 
for (i=0;i<=ftpmkdirlength;i++) 
{ 
ftpmkdir0 = " mkdir " + ftpmkdir.match(/\/.*?\//) + "\n"; 
ftpmkdir1 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\//) + "\n"; 
ftpmkdir2 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir3 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir4 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir5 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir6 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir7 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir8 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir9 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir10 = " mkdir " + ftpmkdir.match(/\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\/.*?\//) + "\n"; 
ftpmkdir1 = " mkdir " + ftpmkdir + ftpmkdir0 + ftpmkdir1 + ftpmkdir2 + ftpmkdir3 + ftpmkdir4 + ftpmkdir5 + ftpmkdir6 + ftpmkdir7 + ftpmkdir8 + ftpmkdir9+ ftpmkdir10; 
ftpmkdir1 = ftpmkdir1.replace(/mkdir null/ig, ''); 

Comment puis-je le rendre plus dynamique? de sorte que le script voir combien de dossiers l'entrée contient ...

Je peux voir le folders full length et obtenir le dossier comme celui-ci /folder1/folder2/folder3 mais avoir besoin de bande à

folder1 
folder1/folder2/ 
folder1/folder2/folder3/ 

puis créer ...

Répondre

1

Vous pouvez utiliser une boucle, en recherchant les index '/' et en les utilisant pour obtenir des parties du chemin complet.

var cmd = ''; 
var j, k; 
var subpath; 

if (ftpmkdir.length < 1 || ftpmkdir === '/') { 
    throw 'no path'; 
} 

j = (ftpmkdir.indexOf('/', 0) === 0) ? 1 : 0; // provides non-slash starting point 
k = ftpmkdir.indexOf('/', j); 

while (k != -1) { 
    subpath = ftpmkdir.substr(j, k - j); // get the path up to the current slash 
    cmd += " mkdir " + subpath + "\n"; 
    k = ftpmkdir.indexOf('/', k + 1); ; // move the cursor 
} 

// check for additional path after last slash mark 
if ((subpath + '/').length !== ftpmkdir.length - j) { 
    cmd += " mkdir " + ftpmkdir.substr(j, ftpmkdir.length - j) + "\n"; 
} 
+0

Wow Lincolnk - Merci beaucoup pour vos problèmes - la solution fonctionne parfaitement! (tel quel et tel que vous l'avez fourni) ... –

1

Quelques idées différentes apparaissent dans ma tête pour aider ici.

Une idée est de considérer que vous pouvez aussi simplement changer de répertoire après avoir créé chacun d'eux, afin de ne pas construire de tels chemins. Voici un exemple d'une séquence de commandes FTP qui permettrait d'obtenir la même chose:

mkdir folder1 
cd folder1 
(working directory is now /folder1/) 
mkdir folder2 
cd folder2 
(working directory is now /folder1/folder2/) 
mkdir folder3 
cd folder3 
(working directory is now /folder1/folder2/folder3/) 
(etc...) 
cd/ (to return "home" when finished) 

Bonne chance!

+0

C'est quelque chose à penser ... Il est logique d'un certain degré .. Merci pour l'entrée –

Questions connexes