如何在分配了未知驱动器号的USB记忆棒上调用可执行文件?

时间:2014-03-31 08:36:30

标签: batch-file

我正在使用Sandisk USB记忆棒,它有一个内置软件,称为安全访问软件,可以访问保险库。

我想从命令行调用此安全访问软件应用程序。

以下是我的批处理文件。它确实识别驱动器,我能够在驱动器上看到该文件。但每次我收到此错误:

  

文件名,目录名或卷标语法不正确

批次代码:

@echo off
setLocal EnableDelayedExpansion
set "myDrive="

for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    if not defined myDrive vol %%a: >nul 2>nul && (
        if exist "%%a:\RunSanDiskSecureAccess_Win.exe" set "myDrive=%%a:"
    )
)

这会检测到驱动器,但下面的代码无法调用该应用程序。

if defined myDrive (
    echo drive found [%myDrive%]
) else (
    echo USB drive has not been found
    rem cd [%myDrive%]:\RunSanDiskSecureAccess_Win.exe

    "[%myDrive%]:\RunSanDiskSecureAccess_Win.exe"
)

endlocal

1 个答案:

答案 0 :(得分:0)

此任务的可能批处理代码是:

@echo off
for %%# in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    vol %%#: >nul 2>nul
    if not errorlevel 1 (
        if exist "%%#:\RunSanDiskSecureAccess_Win.exe" (
            start "Secure Access" "%%#:\RunSanDiskSecureAccess_Win.exe"
            exit /B
        )
    )
)
echo USB drive has not been found.
echo.
pause

对于每个驱动器盘符命令,执行 vol ,其中存在卷的值为0,或者存在的卷的值大于0。现有卷上的标准输出或未存在卷上的错误消息将重定向到设备 nul ,请参阅using command redirection operators

如果 vol 的退出代码不大于或等于 1,则表示退出代码等于0,因为 vol ,执行存在检查以启动可执行文件。

如果应用程序的可执行文件存在于当前驱动器上,则应用程序将在新进程中启动,并且此批处理文件的处理将立即退出,因为无需检查是否存在任何其他驱动器。第一个双引号字符串被命令 start 解释为新进程的标题,这是Secure Access的原因。

但如果在任何驱动器上找不到可执行文件,则会在控制台窗口中显示一条错误消息,并停止批处理,以便用户可以读取该消息,直到用户按任意键或关闭控制台窗口。 / p>

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • exit /?
  • for /?
  • if /?
  • pause /?
  • start /?
  • vol /?