如何在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
相关产品推荐
相关产品推荐

