1

嗨,伙计们,我有一个包含文件位置的文本文件,我正在寻找一种读取文本文件的方法,然后将这些位置用作源位置并将文件复制到单独的目标。

我一直在玩,并且已经看到了动态数组,但似乎无法理解如何将数组的内容放入变量中以作为源位置读取。

到目前为止我所做的例子

Dim TxtFile

dim strDestinationFolder

strDestinationFolder = "\\SERVER\DESTLOGS"

TxtFile = "c:\windows\temp\SOFTWARELOG.txt"


Dim fso:    Set fso = CreateObject("Scripting.FileSystemObject")
Dim f:  Set f = fso.OpenTextFile(TxtFile)

Do Until f.AtEndOfStream

WScript.Echo "PSTLocation: " & f.ReadLine   ; I can read each line here in the txt file 
fso.CopyFile strDestinationFolder, f.REadline  

Loop

我也试过玩,但不知道从哪里开始,虽然它看起来最可靠?

Const ForReading = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
(TxtFile, ForReading)
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
arrServiceList = Split(strNextLine , ",")
WScript.Echo "Server: " & arrServiceList(0)
WScript.Echo "Service: " & objTextFile
For k = 1 to UBound(arrServiceList)
WScript.Echo vbTab & "Service: " & arrServiceList(i)


Next
Loop

请就我应该用vbs解决这个问题的最佳方法提供任何指导。

谢谢

4

1 回答 1

3
WScript.Echo "PSTLocation: " & f.ReadLine
fso.CopyFile strDestinationFolder, f.REadline

您的代码会回显从文件中读取的一行,然后尝试将目标文件夹复制到从文件中读取的下一行。

如果您想对从文件中读取的行做不止一件事,您需要将读取的行分配给一个变量,然后使用该变量。此外,您需要切换CopyFile方法的参数。源头在前,目的地在后。另外,如果您希望目标是一个文件夹,它需要一个尾随反斜杠(否则您会尝试用文件覆盖文件夹,这会引发错误)。

Do Until f.AtEndOfStream
  line = Trim(f.ReadLine)
  WScript.Echo "PSTLocation: " & line
  If fso.FileExists(line) Then fso.CopyFile line, strDestinationFolder & "\"
Loop

读取行中虚假的Trim()前导/尾随空格的原因,并且在尝试对文件执行任何操作之前检查文件是否确实存在总是一个好主意。

编辑:为了检测现有的目标文件并将运行编号附加到文件名,请尝试以下操作:

basename  = fso.GetBaseName(line)
extension = fso.GetExtensionName(line)

destinationFile = fso.BuildPath(strDestinationFolder, basename & "." & extension)

i = 1
Do While fso.FileExists(destinationFile)
  filename = basename & i & "." & extension
  destinationFile = fso.BuildPath(strDestinationFolder, filename)
  i = i + 1
Loop

fso.CopyFile line, destinationFile
于 2013-09-11T17:28:02.410 回答