一个创建新文件夹的脚本无法在Windows 2000下运行

dugufeiyun 2008-03-27 04:50:20
这个是微软提供的一个创建文件夹的脚本

ParentFolder = "C:\"
set objShell = CreateObject("Shell.Application")
set objFolder = objShell.NameSpace(ParentFolder)
objFolder.NewFolder "fso\Archive"

我测试过在XP上运行正常,可以连续创建不存在的多层文件夹,而且如果文件夹已经存在的话不会出现报错;但很可惜这个脚本我在一台Windows 2000上测试的时候却提示:最后一行的语句,“对象不支持此操作” 代码:800A01BD

我尝试使用另一个脚本:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.CreateFolder("C:\FSO")

可以在Windows 2000下测试通过,但该脚本存在两个问题很麻烦,1.不可以连续创建多层文件夹(例如:\fso\fso\fso,这样我需要写多条语句来实现比较麻烦);2.如果文件夹已经存在会报文件已存在的错误(这个还好解决)。

现在请教:如果才能使第一个脚本在Windows 2000下正常运行通过?感谢!
另,Windows 2000 SP4 ,IE6 SP1,由于是服务器,所以没有安装其他的例如Office之类的软件,也不允许安装。
...全文
357 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugufeiyun 2008-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ljc007 的回复:]
友情提示 to 9楼:

取前一天日期时,用BAT调用VBS的方法挺好的,我也经常这样做。
但是在取当前日期时,直接用变量扩展的方法不是很好,由于不同的电脑上的日期格式可能不同,使得代码可移植性变弱。
[/Quote]

哦??

那还是应该用bat调用vbs的方法比较好?

我对vbs不是很了解,该怎么修改才好?改成:

echo wscript.echo dateadd("d",0,date) >%tmp%\tmp.vbs

??这样?会不会显得太复杂了??
ljc007 2008-03-30
  • 打赏
  • 举报
回复
友情提示 to 9楼:

取前一天日期时,用BAT调用VBS的方法挺好的,我也经常这样做。
但是在取当前日期时,直接用变量扩展的方法不是很好,由于不同的电脑上的日期格式可能不同,使得代码可移植性变弱。
147896325 2008-03-29
  • 打赏
  • 举报
回复
学习....
dugufeiyun 2008-03-29
  • 打赏
  • 举报
回复
感谢8楼的朋友的回复

其实你给的这个vbs脚本就是我之前问你的问题,保存应用程序日志的。

我就是参照此脚本来编写以日期命名的文件夹。

但是在用vbs建立文件夹时,就遇到了我在顶楼提出的问题了。。。

昨天晚上终于在网上找到了一个可以用批处理命令来实现的方案了,在此分享给各位:


@echo off

Rem 取当天的日期,并以yyyymmdd的格式放入变量NowDay
set NowDay=%date:~0,4%%date:~5,2%%date:~8,2%

Rem 取前一天的日期,取回放入变量OldDay
echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do (
set y=%%i
set m=%%j
set d=%%k
)
if %m% LSS 10 set m=0%m%
if %d% LSS 10 set d=0%d%
set OldDay=%y%%m%%d%

md D:\"%NowDay%"\“%OldDay%”\app\bak\

@echo on
chenxdb 2008-03-29
  • 打赏
  • 举报
回复
可参考以下VBS,此VBS是备份日志文件,注释部分可看到如何取文件名与服务器名称
dtmThisDay = Day(Date)
dtmThisMonth = Month(Date)
dtmThisYear = Year(Date)
strBackupName = dtmThisYear & "_" & right("00" & dtmThisMonth,2) & "_" & right("00" & dtmThisDay,2) '时间文件名 格式为YYYY_MM_DD
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Backup)}!\\" & _
strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile where LogFileName='Application'")
Set objNetwork = CreateObject("WScript.Network")
strLocalComputer = objNetwork.ComputerName '服务器名称

For Each objLogfile in colLogFiles
objLogFile.BackupEventLog("C:\" & strLocalComputer & "_" & strBackupName & _
"_application.evt")
Next
chenxdb 2008-03-28
  • 打赏
  • 举报
回复
在第二种方法中增加幾條語句就可實現了嘛。
strPath = "C:\FSO\FSO\FSO\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
if right(strPath,1)="\" then strPath=left(strPath,len(strPath)-1)
msgbox strPath
strMyPath=""
Parts = split(strPath,"\")
for i =2 to ubound(Parts)
strMyPath=""
for j = 0 to i
strMyPath = strMyPath+ Parts(j)+"\"
next
if not objFSO.FolderExists(strMyPath) then Set objFolder = objFSO.CreateFolder(strMyPath)
next
Forever_Young 2008-03-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dugufeiyun 的回复:]
批处理我知道怎么做,但是由于文件夹名是按照系统日期来创建的,所以在批处理里似乎不太好控制。
[/Quote]

这个批处理也是办得到的,你就从了ljc007 用批处理吧,^_^
雾岛心情 2008-03-28
  • 打赏
  • 举报
回复
其实LZ可以考虑另外一种方式来实现自动判断系统然后执行相关语句来达到这个效果,根据判断系统来决定执行哪个脚本,这个脚本其实不太难.可以在微软的脚本中心找到
dugufeiyun 2008-03-28
  • 打赏
  • 举报
回复
批处理我知道怎么做,但是由于文件夹名是按照系统日期来创建的,所以在批处理里似乎不太好控制。
dugufeiyun 2008-03-28
  • 打赏
  • 举报
回复
感谢6楼的朋友,不过这个方法还是行不通的。。。

咋说呢,说下我的情况吧,主要是这个建立文件夹(多层,按日期、不同的源服务器、不同的源文件夹目录)、拷贝文件的工作是必须每天都做的,所以我想找个bat或者vbs的脚本放到Windows 2000的计划任务下,让Windows每天定时执行,入6楼,需要人工参与输入,这个就打不到我最终的目的了~~~

正在尝试使用批处理来实现。。。不过有个问题,除了要获取当天日期外,我还需要获取前一天的日期。。。
dugufeiyun 2008-03-28
  • 打赏
  • 举报
回复
批处理建立文件夹??

不清楚哦,文件夹是按照日期命名的,用批处理不太好实现吧?
ljc007 2008-03-27
  • 打赏
  • 举报
回复
用批处理实现能满足楼主要求么?

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧