WScript / vbscript检查目录中的文件

时间:2013-12-17 20:38:40

标签: csv if-statement vbscript directory wsh

在底层代码中工作

处理Convert XLS to CSV on command line的变体,我可以将xls复制为csv。

我只想复制尚未复制的文件,因此需要检查目标目录中是否已存在文件。 想的是:

Set fso=CreateObject("Scripting.FileSystemObject")
Set sourcefldr=fso.getFolder(sourcepath)
Set targetfldr=fso.getFolder(targetpath)
for each sfile in sourcefldr.files
    for each tfile in target
    if not file in targetfldr.files then
    'create excelfile and save as csv

然而file in targetfldr.files无法正常工作

如何避免每次循环遍历所有目标文件?

事先提前!

编辑:

成立@Pankaj Jaju和@Ansgar Wiechers答案,以下工作正在进行中!

csv_format = 6
sourcestring ="C:\sourcefolder"
deststring= "V:\destfolder"

Set fso=CreateObject("Scripting.FileSystemObject")
Set sourcefldr=fso.getFolder(sourcestring)
Set destfldr=fso.getFolder(deststring)
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook

for each sfile in sourcefldr.files
    destname = left(sfile.name,len(sfile.name)-3) & "csv"
    fulldest = fso.buildpath(destfldr, destname)
    if not fso.FileExists(fulldest) then
        Set oBook = oExcel.Workbooks.Open(sfile)
        oBook.SaveAs fulldest, csv_format
        oBook.Close False
        WScript.Echo "Copied " & fulldest
    end if
next

oExcel.Quit

2 个答案:

答案 0 :(得分:2)

试试这个!

set fso=createobject("scripting.filesystemobject")
set sourcefldr=fso.getfolder(sourcepath).files

for each sfile in sourcefldr
    if not fso.fileexists(fso.buildpath(targetpath, sfile.name)) then
        fso.getfile(sfile).copy(fso.buildpath(targetpath, sfile.name))
    end if
next

答案 1 :(得分:0)

最好的办法是将所有目标文件夹文件添加到字典中。这样您就可以使用“存在”在字典中搜索它。

Set fso=CreateObject("Scripting.FileSystemObject")
Set filesDic = CreateObject("Scripting.Dictionary")
Set targetfldr=fso.getFolder(targetpath)

'add destination files into dictionary
For Each file in targetfldr.files
  filesDic.Add file.name, file.name
Next

这样你需要做的就是检查字典

的新文件名
filesDic.Exists(file.name)

这只会返回一个真/假

以下是有关字典http://www.devguru.com/technologies/vbscript/13992

的更多信息