使用 format 命令格式化 USB 驱动器

Format a usb drive using format command

一直在尝试通过 ShellProcess.Start 方法 运行 format.com 命令,但没有成功,需要一些关于我哪里出错的指导。

注意 - 我已将 format.com 的副本放置在我的本地工作目录 (C:\AEL)

Shell("C:\AEL\Format.com " & "G:" & " /q")

结果是错误的:

System.IO.FileNotFoundException' occurred in Microsoft.VisualBasic.dll Additional information: File not found.

我尝试了没有完整路径的情况,结果相同,但也尝试了 System32 目录的完整路径。 AEL 是 m,y 个自己的本地工作目录。

如果我使用Process.Start方法

Process.Start("C:\AEL\format.com " & "G:" & " /q") 

我收到以下错误:

System.ComponentModel.Win32Exception' occurred in System.dll Additional information: The system cannot find the file specified

拔头发 - 一定有一些简单的东西我错过了

there must be something simple I am missing

是的,有。文档。如果您尝试使用某个类型或成员但它不起作用,那么您应该做的第一件事就是阅读该类型或成员的文档。 Microsoft 不会白白花费数百甚至数千工时来编写文档。

如果你这样做了,你就会知道你需要分别为进程提供文件执行和命令行参数:

Process.Start("C:\AEL\format.com", "G: /q")

你会注意到我也没有将两个文字 Strings 连接起来,这很愚蠢。

进一步阅读后使用了以下内容:

Dim FDrive As New ProcessStartInfo
        FDrive.FileName = "format.com"
        FDrive.Arguments = Mid(TDir, 6, 2) & ForQ & Mid(TDir, 9, 4) & "X"
        FDrive.UseShellExecute = False
        FDrive.CreateNoWindow = True
        FDrive.RedirectStandardOutput = True
        FDrive.RedirectStandardInput = True
        Process.Start(FDrive)

这很好用,允许我通过 ForQ 变量 select 完整或快速格式。

还是想明白为什么

process.start("Drivename", "Arguments")

方法不适用。试图了解基于以下方面的差异:

https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.start?view=netframework-4.7.2

其中描述了 Start(String,string) 的用法。

但是,现在想知道如何捕获我刚刚开始的格式化过程的端点。 不得不求助于计时器来检查

Private Sub TimerX_Tick(sender As Object, e As EventArgs) Handles TimerX.Tick
    FProcess = Process.GetProcessesByName("format.com")
    If FProcess.Count > 0 Then : Exit Sub : End If
    TimerX.Stop() : TimerX.Enabled = False
    CreateObject("WScript.Shell").Popup(TDir & " FORMAT COMPLETED", 3, "FORMAT DRIVE REQUEST")
    Can = 0 : ButtonStatus()
End Sub

是否有更简单的方法来监视我可以使用的格式化过程的结束?