2010-09-21 31 views
0

我已经写了下面的下面的脚本 - 我不太高兴的脚本,我认为它可以在一个更优雅的和动态的方式编写...Javascript和ASP创建动态文件夹更优雅

我使用ftp.exe从我的应用程序到另一台服务器的ftp文件。

如果文件夹结构在网站上不存在。我需要创建的文件夹stucture ...

,并与脚本做这种方式

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

下面我迎合了几folder长度,但不是无限的...这样的解决方案将只工作了到一定数量的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, ''); 

我该如何让它更具动感?这样脚本看到输入多少个文件夹包含...

我可以看到folders full length并获得这样/folder1/folder2/folder3的文件夹,但需要将其剥离到

folder1 
folder1/folder2/ 
folder1/folder2/folder3/ 

,然后创建它...

回答

1

您可以使用循环,检查'/'的索引并使用它们获取完整路径的部分。

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

哇Lincolnk - 非常感谢你为你的烦恼 - 该解决方案完美的作品! (现在和由你提供)... – 2010-09-21 22:04:48

1

在我的脑海里出现了几个不同的想法来帮助这里。

一个想法是考虑你也可以在创建每个目录后改变目录,这样你不会最终建立这样的长路径。下面是一个FTP命令序列的例子,它可以达到同样的效果:

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) 

祝你好运!

+0

这是值得思考......这是有道理在一定程度上..感谢输入 – 2010-09-21 21:26:30