You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中顺序执行两条CMD命令?

解决VB.NET中顺序执行CMD命令的问题

你的问题出在两次调用Shell会启动两个独立的CMD进程,第二个进程不会继承第一个进程的工作目录,所以attrib命令还是在默认路径执行,自然没效果。而你尝试用&连接时,不仅语法有小错误,还没考虑路径含空格的场景,导致命令失效。

这里给你几个可行的解决方案:

方案1:用&合并命令并正确处理路径

把两个命令用&连接,同时给路径加上双引号(避免路径含空格时CMD识别出错),修正后的代码如下:

Shared Sub RunCommandCom(path As String)
    Dim unhide As String = "attrib -r -s -h /s /d"
    ' 用&连接cd命令和attrib命令,路径加双引号处理空格
    Shell($"cmd.exe /C cd ""{path}"" & {unhide}")
End Sub

如果习惯传统字符串拼接(注意VB.NET里双引号要转义成两个双引号),可以写成:

Shell("cmd.exe /C cd """ & path & """ & " & unhide)

方案2:指定CMD进程的工作目录(更可靠)

其实完全不需要cd命令,直接在启动进程时指定工作目录会更稳妥。推荐用Process.Start替代老旧的Shell方法——Process类能让你更精准地控制进程行为:

Imports System.Diagnostics

Shared Sub RunCommandCom(path As String)
    Dim unhide As String = "attrib -r -s -h /s /d"
    Dim processStartInfo As New ProcessStartInfo() With {
        .FileName = "cmd.exe",
        .Arguments = $"/C {unhide}",
        .WorkingDirectory = path, ' 直接指定CMD的工作目录
        .WindowStyle = ProcessWindowStyle.Hidden ' 可选:隐藏CMD窗口,提升体验
    }
    Process.Start(processStartInfo)
End Sub

这个方法的优势是不需要处理目录切换的命令,直接让CMD在指定路径下执行attrib,还能按需隐藏窗口、捕获命令输出等。

你之前的&连接为什么没生效?

你写的代码Shell("cmd.exe /C cd " & path "& " & unhide)有两个问题:一是path和"& "之间缺少了字符串拼接的加号,导致语法错误;二是路径没有加双引号,如果路径里有空格,CMD会把空格后的内容当成新参数,自然无法正确切换目录。


内容的提问来源于stack exchange,提问作者user7133363

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:08:34