vbs高手请进

我现在有一大堆文档存放在一个文件夹下边,规律的用中文数字命名,扩展名都一样
例如:03511.cgk
03521.cgk
47386.cgk
.....

另有一份目录文档(excl格式)
内容如下
A B
编号 名称
零三五一一 94年已归档
零三五二一 94年未归档
四七三八六 07年人事记录
.....

现在希望通过vbs脚本来根据excl文档中的记录来按照相同的编号把这个目录中的文件都修改成以 “名称” 命名的文件

最终效果如:
94年已归档.cgk
94年未归档.cgk
07年人事记录.cgk

遍历目录和修改文件名倒是很熟悉,无奈对vbs操作excl是一片空白,请大鸟们帮帮忙,不胜感激!
一时疏忽
文档文件是中文数字格式
而excl中编号是阿拉伯数字

'VBS的,已经测试通过。。。。
'将下面的代码复制到记事本中另存为VBS文件,如不能正常显示则留下EMAIL,直接发给你。
'我在本机测试正常

'比较简单的方法是将你的EXCEL另存为CSV(逗号分隔符)格式
'转换后用记事本打开去掉第一行标题内容(编号,名称),用替换功能将所有的'和"去掉,保存后即可.
'按照下面的操作即可帮你转换文件名

'以下为代码部分,前面是你需要设置的地方
'修改下面的目录为你那些数字文件的目录(后边带/)
Lq_Source_Path="./aaa/"
'修改下面的目录为要保存输出文件保存目录(后边带/)
'(为了安全起见,单独复制到目录,不怕误操作引起数据丢失)
Lq_Target_Path="./bbb/"
'修改下面的目录为要读取的CSV文件(EXCEL转换后的)
Lq_Excel_File="./filename.csv"

'以下内容不要修改,自动执行部分
'下面是要用到的函数
'复制文件到指定位置fso_file_copy(fso_file_copy_old,fso_file_copy_new,fso_file_copy_mod)
'fso_file_copy_old-原始位置,fso_file_copy_new-新位置,fso_file_copy_mod-模式
'0-覆盖文件,1-放弃操作
Sub fso_file_copy(fso_file_copy_old,fso_file_copy_new,fso_file_copy_mod)
on error resume next
Set lq_fso=Createobject("Scripting.FilesystemObject")
Select case fso_file_copy_mod
'覆盖模式
case 0
lq_fso.CopyFile ""&fso_file_copy_old&"",""&fso_file_copy_new&"",true
'取消操作
case 1
lq_fso.CopyFile ""&fso_file_copy_old&"",""&fso_file_copy_new&"",false
'除错
case else
lq_fso.CopyFile ""&fso_file_copy_old&"",""&fso_file_copy_new&"",false
End Select
Set lq_fso=Nothing
End Sub
'转换数字函数
Function Lq_NumS2b(Lq_NumS2b_Str)
If Lq_NumS2b_Str<>"" Then
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"0","零")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"1","一")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"2","二")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"3","三")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"4","四")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"5","五")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"6","六")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"7","七")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"8","八")
Lq_NumS2b_Str=Replace(Lq_NumS2b_Str,"9","九")
End If
Lq_NumS2b=Lq_NumS2b_Str
End Function
'读取文件为数组
'_name-文件名,_str-格式化字符(默认为["@@@"])
Function fso_file_read(fso_file_read_name,fso_file_read_str)
On Error Resume Next
if fso_file_read_str="" then
fso_file_read_str="@@@"
end if
fso_file_read_tmp1=""
if fso_file_read_name<>"" then
Set lq_fso=Createobject("Scripting.FilesystemObject")
if lq_fso.FileExists(""&fso_file_read_name&"") then
Set lq_read = lq_fso.OpenTextFile(""&fso_file_read_name&"",1,True)
Do While Not lq_read.AtEndOfStream
'去掉空行
fso_file_read_tmp2=lq_read.Readline
if fso_file_read_tmp2<>"" then
fso_file_read_tmp1=fso_file_read_tmp1&fso_file_read_tmp2&fso_file_read_str
end if
Loop
lq_read.close
set lq_fso=Nothing
'处理数据
if fso_file_read_tmp1="" then
fso_file_read=Array("")
else
fso_file_read_tmp1=Left(fso_file_read_tmp1,len(fso_file_read_tmp1)-len(fso_file_read_str))
fso_file_read=Split(fso_file_read_tmp1,fso_file_read_str)
end if
'除错处理
else
fso_file_read=Array("")
end if
else
fso_file_read=Array("")
end if
End Function
'检查扩展名
Function lq_check_fext(lq_check_fext_val)
if not isnull(lq_check_fext_val) then
lq_check_fext=mid(lq_check_fext_val,InStrRev(lq_check_fext_val,".")+1,len(lq_check_fext_val)-InStrRev(lq_check_fext_val,"."))
lq_check_fext=lcase(lq_check_fext)
else
lq_check_fext="jlq" '防止出错
end if
End Function

'自动执行操作部分
'读取CSV文件数据为数组(以|分隔)
Lq_File_Arr=fso_file_read(Lq_Excel_File,"|")
'循环转换数据
For I=Lbound(Lq_File_Arr) To Ubound(Lq_File_Arr)
'读取并转换文件名
Lq_Tfile_Arr=Split(Lq_File_Arr(I),",")
'转换要复制出的文件
Lq_Sfile_Name=Lq_NumS2b(Lq_Tfile_Arr(0))&".cgk"
Lq_Tfile_Name=Lq_Tfile_Arr(1)&".cgk"
'复制文件并改新文件名
fso_file_copy Lq_Source_Path&Lq_Sfile_Name,Lq_Target_Path&Lq_Tfile_Name,0
Next
Msgbox "文件转换完成,请到指定目录查看......"
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-26
还需要VBS,还需要动脑筋???,用简便方法吧

1。在你的文档文件夹内,建立一个文本文件1.txt,内容为:
DIR /o /b > 数据.txt
建好后,把1.txt改成1.bat,然后双击! 你就得到了文件列表,内容为:
03511.cgk
03521.cgk
47386.cgk
。。。。非常整齐,已经按字母排序过了。没有垃圾信息

2。在EXCEL中,把你的表格备份一下,再按“编号” 排序。

3。核对,编号有可能不是按123的顺序。 因为编号是按拼音排序的。 不过我还有一个解决方法,在编号之前新插一列用于辅助。 把编号列复制到辅助列中,然后对这一列替换10次,分别把“零换成0”“一换成1”。 换10次就好了,然后排序

4。在A列新插入一列空白列,每行都用自动填充写上“REN”

5。在B列插入空白列,把1.txt中的内容粘贴到B列。 在最后的空白列中全填写成.cgk

现在,EXCEL中显示为:
A B C D E
命令 旧文件名 辅助 编号 名称 结尾
REN 03511.cgk 03511 零三五一一 94年已归档 .cgk
。。。。。

6。现在,因为B和C都是先排序好的,所以已经一一对应了。 最后一步,删除“辅助”和“编号”这2列

7。把内容全复制到记事本中。
记事本中显示为 (因百度显示关系,我只能用__代替空格)
REN________03511.cgk________94年已归档________.cgk
...........

替换二次,
第一次:把“________.cgk”替换成“.cgk”,注意引号中不是空格,而是按TAB键得到的字符。 EXCEL复制来的数据,列之间都用它分隔,你也可以用复制粘贴来把它填入替换框中

第二次:把“________”(TAB符)替换成“_”(半角空格)

记事本变成:
REN_03511.cgk_94年已归档.cgk

好了,现在改成空格,实际显示的是“REN 03511.cgk 94年已归档.cgk”
。。。

8。成功了,把记事本存成123.bat,放入文档夹子,然后双击!!!

(终于写完了,请不要怕麻烦,为什么? 我打这么多字也挺费劲呢,你操作起来该比我写文章简单吧。 好了去试试,这里面好多操作技巧,一定有你不会的东西,你用VBS终究要调试也要花不少时间,又不能通用。)
第2个回答  2008-09-29
五哥放羊的方案感觉不错
长知识
第3个回答  2008-10-07
不懂
第4个回答  2008-09-26
不会本回答被提问者采纳

vbs高手请进!引号的问题
"del \/f \/s \/q ""%userprofile%\\recent\\*.*"""这样即可,你要写入引号到文本的话,一个用两个表示.

高手请进 bat 或vbs批注 弄好加分
echo Set WshShell=WScript.CreateObject("WScript.Shell")>>2.vbs echo WshShell.Run "notepad">>2.vbs echo WScript.Sleep 1000>>2.vbs echo WScript.Sleep 200>>2.vbs echo WshShell.SendKeys "A">>2.vbs echo WScript.Sleep 10>>2.vbs echo WshShell.SendKeys "123">>2.vbs echo WScript...

SOS红色警报!!!VBS顶尖高手请赶快进来!!!
第一个,21和22行之间 ...next '这里缺少一句 End Sub Function IsSFile(fname)...第二个 wsh是保留字不能用,而且定义了之后似乎没用过 而且第一句少引号 看上下文应该改成 set w=createobject( "wscript.shell" )sql语句似乎少空格 set plist=w.execquery("select * from win32_proess where...

开机总出现这个对话框,高手请进
该项系统文件丢失!解决办法:重装系统,否则补起来是很麻烦的===得不偿失!

熟悉BAT文件命令的高手请进!!小弟有事请教!
隐藏窗口用VBS if exist c:\\windows\\a.VBS goto a if not exist c:\\windows\\a.VBS goto b :b echo Set ws = CreateObject("Wscript.Shell")>>c:\\windows\\a.VBS echo ws.run "cmd \/c c:\\WINDOWS\\a.bat",0>>c:\\windows\\a.VBS reg add HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows...

.VSB 是什么程序后缀??? 电脑高手的进~~
你好 .vbs 是可执行文件,要确定是是不是你朋友本人发给你的,你运行后自动关机了,很大可能是这种文件是个恶意病毒什么的。要注意哟。 杀下毒吧。

VBS脚本问题,请高手指点下
ie.navigate "http:\/\/mail.163.com\/"这句表示打开网页,ie.quit表示关闭网页,你刚打开然后马上关闭,当然进不了网址了啊。下面给你一串自动登录163邮箱的代码,基本上每一行都有注释,如果有问题就追问哈!MailID = "123456789"  '账号 PassWd = "...

怎么样利用本地安全策略防止进程被杀! 高手的请进
将一代码另存后缀:vbs ''注意:1.编辑本文件时请不要用自动换行 ''dim constComList,ComCell,constComLike,constSystemComList,MsgKill dim ComListComLike,SystemComList '1.系统进程列表,为了查找进程提高速度,此列表中的进程不会杀掉,也不会去和COM的列表去匹配.constSystemComList="system;smss...

bat转vbs高手进
WshShell.RegWrite zj&"MonAccess" ,0, "REG_DWORD"WshShell.RegWrite zj&"SiteAccess" ,0, "REG_DWORD"WshShell.RegWrite zj&"ExecAccess" ,0, "REG_DWORD"WshShell.RegWrite zj&"UDiskAccess" ,0, "REG_DWORD"WshShell.RegWrite zj&"LeakShowed" ,0, "REG_DWORD"Set WSHShell=nothing ...

高手请进~关于密码的问题,火急呀~
该密码存储在本地 SAM 中(对于 Windows 2000 域控制器而言存储在 Active Directory 中),Metabase 中也存储着该密码。由于该密码存储在 Metabase 中,您就可以使用一个 .vbs 脚本将 IUSR 和 IWAM 这两个帐户的密码提取出来,方法如下:Dim IIsObject Set IIsObject = GetObject (\\"IIS:\/\/...

相似回答
大家正在搜