0

假设我想将文件从 Windows 本地目录(不是服务器上)复制到 AS/400 IFS,如何使用 cmd 来实现?我知道还有其他方法,例如硬盘映射或 iSeries Navigator,但这里的目的是使用 VBA 执行此类命令,以便当有人单击按钮时,目标文件将在 IFS 中复制。我尝试直接在 cmd 中使用复制命令,但由于未提供用户配置文件和密码而失败。那么是否可以在cmd中使用命令来实现这一点?如何?如果在此过程中弹出一个窗口要求我填写用户名和密码是可以接受的。

4

2 回答 2

3

您对 VBA 的选择是:

  • 通过 FTP 上传到 IFS。
  • 通过 SMB ( iSeries Netserver )上传到 IFS 。
  • 使用 [客户端] 访问自动化上传到数据库并复制到 IFS。

FTP 示例

您可以创建一个 ftp 脚本文件并执行它。以下是我通常使用批处理文件的方式:

@echo off
echo open AS400_HOSTNAME > ftp.cmd
echo user AS400_USERNAME AS400_PASSWORD >> ftp.cmd
echo ascii >> ftp.cmd
echo cd AS400_PATH >> ftp.cmd
echo put PC_FILENAME AS400_FILENAME >> ftp.cmd
echo quit >> ftp.cmd
ftp.exe -n -s:ftp.cmd

网络服务器示例

将驱动器映射到 iSeries Netserver 时,您可以强制输入用户名和密码:

NET USE Z: \\as400\share /USER:username password
COPY FILE.TXT Z:\DIR
NET USE Z: /DELETE
于 2012-05-17T17:09:04.733 回答
0
Imports System
Imports System.Data
Imports System.IO
Imports System.Diagnostics
Imports Microsoft.VisualBasic.FileIO

Module Module1
Dim strCmdArg As String = "/c NET USE P: \\host.domain.com\root\home\user /user:host.domain.com\user password"
Dim strCmdDel As String = "/c NET USE /DELETE P:"
Dim strLocalFile As String = "\\windowsserver\share\folder\"
Dim strRemoteFile As String = "P:\"
Dim boolOverwrite As Boolean = True
Dim job As Process = Process.Start("cmd.exe", strCmdArg)
Dim endjob As Process = Process.Start("cmd.exe", strCmdDel)

Sub Main()
    Try
        job.Start()
        job.Dispose()
        job.Close()
        FileSystem.CopyDirectory(strLocalFile, strRemoteFile, boolOverwrite)
        endjob.Start()
        endjob.Dispose()
        endjob.Close()
    Catch Ex As Exception
        Console.WriteLine(Ex.Message)
        Console.WriteLine(Ex.StackTrace.ToString)
        endjob.Start()
        endjob.Dispose()
        endjob.Close()
    End Try
End Sub
End Module
于 2018-06-11T21:32:13.187 回答