【问题标题】:Running a batch file in a network directory using VBA使用 VBA 在网络目录中运行批处理文件
【发布时间】:2016-12-20 22:41:01
【问题描述】:

我有一个从 VBA 调用的 .bat 文件,当我使用本地文件夹作为路径时它正在工作(例如 C:\Users\cthoud01\Desktop\my scripts\scripts)。

但是,如果我使用来自网络目录的路径(例如 - H:\scripts),则会出现错误。我也尝试将路径替换为 """H:\scripts\""" 但继续得到同样的错误。我想听听我们的专家是否有任何方法可以使这项工作。

以下是我收到的错误消息:

我正在使用的 VBA 代码:

Sub test()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim WindowStyle As Integer: WindowStyle = 1
Dim errorCode As Long


Dim pth As String
errorCode = wsh.Run("cmd.exe /k cd """ & "H:\scripts\" & """ && DeleteMatrix.bat", WindowStyle, waitOnReturn)

If errorCode <> 0 Then
    MsgBox "fail, please retry"
    End
End If

结束子

【问题讨论】:

  • 请参阅cd /? 了解为什么它不起作用。您的 cd 命令没有按照您的想法执行。

标签: excel batch-file vba


【解决方案1】:
errorCode = wsh.Run("cmd.exe /k cd /d """ & "H:\scripts\" & """ && DeleteMatrix.bat", WindowStyle, waitOnReturn)

看看多余的/d

在 MSDos 中,每个驱动器都有一个当前目录。

C:\>cd D:\dog
C:\>Copy *.* D:

会将文件复制到 d:\dog 目录中。这使打字更容易。没有鼠标或菜单。

Windows 只有当前目录的概念(并且是每个程序)。

因此,MSDos 批处理文件在 CMD 中运行不变,您必须使用/d 告诉 Windows 您不希望使用 CD 命令执行 MSDos 行为。

同样,CMD 模拟每个目录的默认驱动器。

这是它在进程的环境块中的样子

=C:=C:\Users\David Candy\Desktop\Editor\EditorSdi
=D:=d:\~MSSETUP.T

【讨论】:

  • 太棒了,谢谢,这适用于本地和网络文件夹。
  • 那个/d开关比较新吗? (即在过去 10 年中增加了一些时间?)我不记得很多年前我使用 DOS 命令时可用。
  • 有两个 Windows 版本的 CMD。 NT4 及更早版本和 Windows 2000 及更高版本。它是在 OS/2 上开发的。它最初是 CP/M 兼容的,微软在 MSDos V2 中添加了 Unix 功能(句柄和重定向的概念),IBM OS/2 使其工作方式与 MSDos 相同,但使用许多额外功能重载了大多数命令,因此它是一个大杂烩。 MS 在 Windows 上出现时非常面向 VAX/VMS,但它非常接近 IBM 的版本。在帮助中,所有对新行为的引用都是指 NT4 到 Win 2000,而不是 MSDos 到 CMD。
  • @user6017774 如果我使用网络共享驱动器,我会收到“CMD 不支持 UNC 路径作为当前目录”错误,是否有任何解决方法?想使用 PUSHD 命令,但不确定如何与它集成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多