Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

问一个关于批处理文件的问题

古家林  发表于:2007-12-30 12:32:54  
复制

虽然access的问题,但也和数据库有关的。我想了一个批处理文件,内容是:copy \\apserver\shuju\新物料管理.mdb d:\ap\新物料管理.mdb" 。意思就是把我厂服务器上的新物料管理.mdb这个文件拷到本机的d:\ap下。我现在想问的是,能不能拷到与这个批处理文件的同一个文件夹内呢?这样我就不用设定死安装的路径了。我试过用CurrentProject.Path也不行,请大家指教了。另,祝大家元旦快乐,谢谢。

 

Top
Victor Duane 发表于:2007-12-30 12:47:07


Victor Duane 发表于:2007-12-30 12:48:07

啊,我打了一大段,结果没传上来,晕啊



Victor Duane 发表于:2007-12-30 12:48:40

Private Const PROGRESS_CANCEL = 1
Private Const PROGRESS_CONTINUE = 0
Private Const PROGRESS_QUIET = 3
Private Const PROGRESS_STOP = 2
Private Const COPY_FILE_FAIL_IF_EXISTS = &H1
Private Const COPY_FILE_RESTARTABLE = &H2

'// 此 API 在 WIN9X 下不能使用
Private Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long

Private mlngCancel                  As Long
Private mprgState                   As Object
Private mlblState                   As Object

Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, _
                                    ByVal TotalBytesTransferred As Currency, _
                                    ByVal StreamSize As Currency, _
                                    ByVal StreamBytesTransferred As Currency, _
                                    ByVal dwStreamNumber As Long, _
                                    ByVal dwCallbackReason As Long, _
                                    ByVal hSourceFile As Long, _
                                    ByVal hDestinationFile As Long, _
                                    ByVal lpData As Long) As Long
   '// 显示进度
   mprgState.Value = CLng((100 / TotalFileSize) * TotalBytesTransferred)
   mlblState.Caption = "已完成: " & FormatPercent(mprgState.Value / 100, 0)
   '
   DoEvents
   '// 继续复制
   CopyProgressRoutine = PROGRESS_CONTINUE
End Function

Public Function uCopyFile(ByVal strFrom As String, _
                          ByVal strTo As String, _
                          ByRef prgState As Object, _
                          ByRef lblState As Object) As Boolean
   Dim lngReturn                   As Long
  
   Set mprgState = prgState
   Set mlblState = lblState
   '// 开始复制
   lngReturn = CopyFileEx(strFrom, strTo, _
                          AddressOf CopyProgressRoutine, ByVal 0&, mlngCancel, COPY_FILE_RESTARTABLE)

   If lngReturn = 0 Then
      uCopyFile = False
   Else
      uCopyFile = True
   End If
End Function

 



Victor Duane 发表于:2007-12-30 12:51:30

上面的代码写入通用模块中,

在窗体中写入以下代码:

'************************************************
'** 函数名称:  uCopyFile
'** 函数功能:  复制文件
'** 参数说明:
'**            strFrom              源文件
'**            strTo                目标文件
'**            prgState             进度条控件
'**            lblState             用来显示进度的 Label
'** 函数返回:
'**            Boolean 类型
'**            True                 复制成功
'**            False                复制失败
'** 参考实例:
'**
'**            blnReturn = uCopyFile("c:\test.exe", "d:\test.exe", prgState, lblState)
'** 示例作者:  Grant
'** 来    源:  www.accessbbs.cn
'************************************************


'  在调用时,直接使用 uCopyFile("c:\test.exe", "d:\test.exe", prgState, lblState),其中的 prgState 你可以去掉不要,由自己来定。

 

Private Sub copy_Click()
blnReturn = uCopyFile("c:\txt.txt", "c:\txt2.txt", prgState, lblState)


End Sub



Victor Duane 发表于:2007-12-30 13:44:34

另外也可用xcopy复制文件

Xcopy

复制文件和目录,包括子目录。

语法

xcopy Source [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:mm-dd-yyyy]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:file1[+[file2]][+[file3]] [{/y|/-y}] [/z]

参数

Source
必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。
Destination
指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。
/w
在开始复制文件之前将显示以下消息并等待您的响应:

Press any key to begin copying file(s)

/p
提示您确认是否要创建每个目标文件。
/c
忽略错误。
/v
在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同。
/q
禁止显示 xcopy 消息。
/f
复制时显示源文件名和目标文件名。
/l
显示要复制的文件列表。
/g
创建解密的目标文件。
/d[:mm-dd-yyyy]
只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括 mm-dd-yyyy 值,xcopy 会复制比现有 Destination 文件新的所有 Source 文件。该命令行选项使您可以更新更改过的文件。
/u
只从 source 复制 destination 中已有的文件。
/i
如果 Source 是一个目录或包含通配符,而 Destination 不存在,xcopy 会假定 destination 指定目录名并创建一个新目录。然后,xcopy 会将所有指定文件复制到新目录中。默认情况下,xcopy 将提示您指定 destination 是文件还是目录。
/s
复制非空的目录和子目录。如果省略 /sxcopy 将在一个目录中工作。
/e
复制所有子目录,包括空目录。同时使用 /e/s/t 命令行选项。
/t
只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 命令行选项。
/k
复制文件,如果源文件具有只读属性,则在目标文件中保留该属性。默认情况下,xcopy 会删除只读属性。
/r
复制只读文件。
/h
复制具有隐藏和系统文件属性的文件。默认情况下,xcopy 不复制隐藏或系统文件。
/a
只复制那些具有存档文件属性设置的源文件。/a 不修改源文件的存档文件属性。有关如何通过使用 attrib 来设置存档文件属性的信息,请参阅“相关主题”。
/m
复制具有存档文件属性设置的源文件。与 /a 不同,/m 关闭在源中指定的文件的存档文件属性。有关如何通过使用 attrib 来设置存档文件属性的信息,请参阅“相关主题”。
/n
使用 NTFS 短文件或目录名创建副本。将文件或目录从 NTFS 卷复制到 FAT 卷或者当目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要 /n。目标文件系统可以是 FAT 或 NTFS。
/o
复制文件所有权与自由选择的访问控制列表 (DACL) 信息。
/x
复制文件审核设置和系统访问控制列表 (SACL) 信息(包含 /o)。
/exclude:filename1[+[filename2]][+[filename3]]
指定包含字符串的文件列表。
/y
禁止提示您确认要覆盖现存的目标文件。
/-y
提示您确认要覆盖现有目标文件。
/z
在可重启模式中通过网络复制。
/?
在命令提示符显示帮助。

注释

  • 使用 /v

    Windows XP 不使用该命令。使用它只是为了与 MS-DOS 文件兼容。

  • 使用 /exclude

    列出每个文件的单独行中的每个字符串。如果列出的任何字符串与要复制的文件的绝对路径的任何部分匹配,就从复制进程排除该文件。例如,如果指定字符串 "\Obj\",则会排除 Obj 目录下的所有文件。如果指定字符串 ".obj",则排除具有 .obj 扩展名的所有文件。

  • 使用 /z

    如果在复制过程中丢失连接(例如,如果用于连接的服务器脱机),复制过程将在重新建立连接后恢复。/z 也显示每个文件完成的复制操作的百分比。

  • 在 COPYCMD 环境变量中使用 /y

    可在 COPYCMD 环境变量中使用 /y。在命令行上使用 /-y 可以覆盖该命令。默认情况下,会提示您覆盖,除非您从批处理脚本内运行 copy

  • 复制加密的文件

    将加密文件复制到不支持 EFS 的卷会导致错误。应首先解密文件或将文件复制到支持 EFS 的卷中。

  • 附属文件

    要附加文件,请指定单个目标文件,多个源文件(使用通配符或文件 1 + 文件 2 + 文件 3 格式)。

  • Destination 的默认值

    如果省略 Destinationxcopy 命令将文件复制到当前目录。



  • 古家林 发表于:2007-12-31 17:09:58

    按照V兄xcopy的方法搞掂了,但是又有新问题出现,我原来的思路是启动一个叫update的mdb,这个mdb打开后就运行一个叫update的批处理文件和一个叫新管理系统的mdb。这个批处理文件很简单:xcopy \\apserver\shuju\新管理系统.mdb /y 。问题来了,当我点击这个批处理文件运行的时候是正常的,但是如果用update数据库打开这个批处理文件的话,他就会把文件复制到c;\我的文档下,而不会复制到当前的文件夹,我试过在其他的电脑上也是一样会复制到系统盘的我的文档里面。我在update.mdb的代码是这样写的:

    Dim xtpf, cxph, fs, d, v, e As String
    Dim str4 As String

    xtpf = CurrentProject.Path '当前路径
    cxph = Left(xtpf, 3)
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(cxph)))
    v = Hex(d.SerialNumber)
    Dim RetVal
    str4 = """"
    Dim strMDB As String
    Dim stAppName As String

       

    stAppName = xtpf & "\update.bat"
        Call Shell(stAppName, 1)    

     

    Shell str4 & SysCmd(acSysCmdAccessDir) & "msaccess.exe" & str4 & " " & str4 & xtpf & "\新物料管理.mdb" & str4 & " /wrkgrp " & str4 & "\\apserver\shuju\Security.mdw" & str4 & " " & "/User " & " " & "/pwd" & " " & "", 2

    DoCmd.Quit    ''退出外壳

     

     

    请大家指教了。



    总记录:6篇  页次:1/1 9 1 :