【问题标题】:VBS Copy Files from a text fileVBS 从文本文件复制文件
【发布时间】:2013-09-12 18:52:20
【问题描述】:

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

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

到目前为止我所做的示例

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 解决这个问题的最佳方法是什么,请提供任何指导。

谢谢

【问题讨论】:

    标签: arrays text vbscript copy


    【解决方案1】:
    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
    

    【讨论】:

    • 非常感谢您的帮助,修剪线绝对有帮助。非常感谢!
    • 目前它检查文件是否存在是一种增加名称的方法,所以如果文件已经存在,则复制相同的命名文件但在其末尾添加一个数字?
    • 谢谢 Ansgar 你能解释一下逻辑吗,这样我可以试着理解一下吗?我试图将上述内容合并到读取我的文件中,如下所示 Do Until f.AtEndOfStream line = Trim(f.ReadLine) WScript.Echo "PSTLocation: " & Line if Not fso.FolderExists(strDestinationFolder) Then fso.CreateFolder(strDestinationfolder ) 结束 if Do While fso.FileExists(destinationfile) filename = basename & i & "." & extension destinationFile = fso.BuildPath(strDestinationFolder, filename) i = i + 1 Loop fso.CopyFile line, strDestinationFolder & "\" Loop
    • 将文件夹创建移到循环之外。除非您想中途更改目标文件夹,否则您只需执行一次。此外,您遗漏了一半的代码。在脚本开头添加Option Explicit。这会给你一些指示。并且请不要在 cmets 中发布代码,因为这会使其不可读。
    猜你喜欢
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多