使用 format 命令格式化 USB 驱动器
Format a usb drive using format command
一直在尝试通过 Shell
或 Process.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
是否有更简单的方法来监视我可以使用的格式化过程的结束?
一直在尝试通过 Shell
或 Process.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
是否有更简单的方法来监视我可以使用的格式化过程的结束?