Windows 如何获取具有特定驱动器名的驱动器的驱动器号?

Windows 如何获取具有特定驱动器名的驱动器的驱动器号?,windows,file,batch-file,copy,Windows,File,Batch File,Copy,我对批处理脚本非常陌生,我需要它来为多台电脑自动设置文件 我的文件和批处理文件存储在闪存驱动器上 我想用批处理文件将闪存驱动器上的文件夹E:\IMPDoc复制到电脑上驱动器名不区分大小写的驱动器Files。计算机没有所有的D:作为文件驱动器 如何获取驱动器名为文件的驱动器的驱动器号?用于将文件夹IMPDoc从存储批处理文件的驱动器复制到卷名为文件的驱动器的批处理文件代码为: @echo off setlocal EnableExtensions DisableDelayedExpansion f

我对批处理脚本非常陌生,我需要它来为多台电脑自动设置文件

我的文件和批处理文件存储在闪存驱动器上

我想用批处理文件将闪存驱动器上的文件夹
E:\IMPDoc
复制到电脑上驱动器名不区分大小写的驱动器
Files
。计算机没有所有的
D:
作为
文件
驱动器


如何获取驱动器名为
文件的驱动器的驱动器号?

用于将文件夹
IMPDoc
从存储批处理文件的驱动器复制到卷名为
文件的驱动器的批处理文件代码为:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "skip=1" %%I in ('%SystemRoot%\System32\wbem\wmic.exe LOGICALDISK where VolumeName^="Files" GET DeviceID 2^>nul') do (
    %SystemRoot%\System32\robocopy.exe "%~d0\IMPDoc" "%%I\IMPDoc" /R:1 /W:1 /NDL /NFL /NJH /NJS
    goto EndBatch
)
echo ERROR: Found no drive with volume name "Files".
echo/
pause
:EndBatch
endlocal
我建议先在窗口中运行命令行:

%SystemRoot%\System32\wbem\wmic.exe LOGICALDISK where VolumeName="Files" GET DeviceID
它应该显示如下内容:

DeviceID  
D:        
我们看不到的是,的输出是使用(BOM)编码的,这经常会引起问题,因为Windows命令处理器设计用于处理每个字符一个字节的文本,即ASCII/ANSI/OEM编码文本。在命令提示符窗口中也看不到两行上的尾随空格

FOR命令行导致在后台启动另一个命令进程,其中
%ComSpec%/c
'
之间的命令行作为附加参数附加。因此,有必要将等号转义为
^
,以将其解释为文字字符,而不是像往常一样将
=
替换为空格字符作为参数字符串之间的分隔符。所以在后台执行,Windows安装到目录
C:\Windows

C:\Windows\System32\cmd.exe /c C:\Windows\System32\wbem\wmic.exe LOGICALDISK where VolumeName="Files" GET DeviceID 2>nul
当卷名被
2>nul
从后台命令处理的句柄STDERR重定向到设备nul以抑制卷名时,未发现驱动器上WMIC输出的错误,该错误带有不区分大小写的解释字符串
文件

阅读有关的Microsoft文档,以了解有关nul的说明。当Windows命令解释器在执行的命令之前处理该命令行时,重定向操作符
必须在上用插入符号
^
转义,以便命令行被解释为文字字符,该命令行以单独的方式执行嵌入的wmic命令行命令进程在后台启动

WMIC为处理后台命令过程的STDOUT而写入的输出由FOR捕获,并在启动
cmd.exe后逐行处理

由于使用选项
skip=1
,除了处理捕获的输出时总是被跳过的空行外,还跳过了第一行

因此,处理的第一行是第二行FOR默认情况下,使用普通空格和水平制表符作为字符串分隔符将行拆分为子字符串,并仅将第一个空格/制表符分隔的字符串分配给指定的循环变量
I
。这种默认的行拆分行为正是这里所需要的,它只获取驱动器号和冒号,而不必为循环变量
I
分配尾随空格

FOR默认情况下也会忽略第一个空格/制表符分隔字符串以分号开头的行。但是只有一行要处理,它以驱动器号开头,因此默认的行结束选项
eol=

FOR将驱动器号和冒号分配给循环变量
I
后,执行命令块中的两个命令。因此,ROBOCOPY将驱动器上带有刚刚执行的批处理文件的目录
IMPDoc
中的所有文件复制到驱动器根目录中具有卷名
files
的目录
IMPDoc
,如果尚未存在,则由ROBOCOPY自动创建目标目录。然后使用命令GOTO退出循环,以在标签
EndBatch
下方的命令行上继续批处理文件

要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • endlocal/?
  • 获取/?
  • goto/?
  • 暂停/?
  • robocopy/?
  • setlocal/?
  • wmic/?
  • wmic logicaldisk/?
  • wmic logicaldisk get/?
另见:

  • Microsoft文档
  • DosTips论坛主题: