【问题标题】:How to check for specific disc and pass on drive letter to another batch file?如何检查特定磁盘并将驱动器号传递给另一个批处理文件?
【发布时间】:2014-11-22 23:02:16
【问题描述】:

我想使用批处理文件通过引用其卷名来检查特定磁盘是否在驱动器中,然后将磁盘所在的驱动器号传递给另一个批处理文件。我设法找到了几乎适合我的东西,但不完全是:Get the drive letter of a given volume?。我一直在尝试使以下内容起作用,但现在语法不正确,我不知道在哪里。

SET "volname=Desired_Name"
FOR %%d IN (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A) DO IF EXIST %%d:\. (
 FOR /f "tokens=5*" %%L IN ('VOL %%d:^|FIND /i "drive"'
  ) DO IF "%%L"=="is" IF "%%M"=="%volname%" set drive=%%d & goto success
)
goto :eof
:success
success.bat %drive%

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    如果我是你,我会数你的括号——开放的多于封闭的...


    啊!现在我已经清理了我的显示器...

    我有 2 个 DVD 驱动器,发现如果我将目标放在一个中,测试并将其移到另一个,空的驱动器会弹出一个令人讨厌的窗口。

    所以我摆弄了代码并想出了这个,它似乎不受缺失内容的影响:

    @ECHO OFF
    SETLOCAL
    SET "volname=HTML4_WCC"
    FOR %%d IN (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A) DO (
     FOR /f "tokens=5*" %%L IN ('VOL %%d: 2^>nul^|FIND /i "drive"'
      ) DO IF "%%L"=="is" IF "%%M"=="%volname%" set drive=%%d & goto success
    )
    goto :eof
    :success
    ECHO Disc in %drive%
    GOTO :EOF
    

    或者您的大小写不匹配需要if /i

    【讨论】:

    • 我已经仔细检查过,在括号中找不到任何不匹配的地方。你在哪里看到的?
    【解决方案2】:

    感谢 Magoo,您上面的回答对我来说非常适合。我还根据这个问题Refer to/select a drive based only on its label? (i.e., not the drive letter) 的答案提出了一个稍微简单的替代方案。

    @echo off
    for /f %%D in ('wmic volume get DriveLetter^, Label ^| find "HTML4_WCC"') do set 
    drive=%%D
    if not "%drive%"=="" goto success
    goto :eof
    :success
    echo Disc in %drive%
    goto :eof
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2016-08-13
      • 2011-08-09
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多