需要批处理文件代码用cd-rom驱动器号替换filepath

时间:2010-06-08 19:16:39

标签: batch-file

这是我目前的复制声明。

我希望用%cdrom%替换F:这样无论使用什么计算机,这个脚本都能正常工作。

XCOPY F:\*.* .\disk2\ /C /S /D /Y /I

2 个答案:

答案 0 :(得分:1)

不幸的是,在批处理文件中检测CD-ROM驱动器并不容易。你必须使用一些工具。即使您有一些可以成功检测CD-ROM /硬盘/ USB状态的工具,仍然可以有多个CD-ROM驱动器或虚拟驱动器。

最简单的方法之一(尽管你不能依赖它):尝试将临时文件复制并删除到D,E,F,G ......直到出现错误(这会给你第一个只读驱动器,通常是CD-ROM驱动器。)

您还应考虑向用户询问驱动器号,或者至少让他可以定义%CDROM%。

还有其他方法可以检测网络中浮动的CD-ROM驱动器(fe here),但它们通常只与特定操作系统一起使用并依赖于注册表编辑器等工具,所以你应该考虑一下使用一些非批处理解决方案或其他工具。

答案 1 :(得分:1)

我只拼凑了以下小脚本:

@echo off
setlocal enableextensions enabledelayedexpansion
set count=0
for /f "skip=1 tokens=1* delims= " %%x in ('wmic cdrom get drive^,name') do (
    if not [%%y]==[] (
        set /a count+=1
        set drive_!count!=%%x
        set drivename_!count!=%%y
    )
)

if %count%==0 goto error
if %count%==1 set cdrom=%drive_1%
if %count% GTR 1 call :more

if defined ERROR goto :eof

XCOPY %cdrom%\*.* .\disk2\ /C /S /D /Y /I 

goto :eof

:more
set ERROR=
set letters=
echo %count% CD ROM drives found
for /l %%x in (1,1,%count%) do (
    echo.  !drive_%%x! - !drivename_%%x!
    set letters=!letters!!drive_%%x:~0,1!
)
choice /C %letters% /M "Enter the drive letter to copy from" /N
if errorlevel 255 set ERROR=1
if not errorlevel 1 set ERROR=1
set cdrom=!drive_%errorlevel%!
goto :eof

:error
1>&2 echo No CD ROM drive found
goto :eof

应该相当简单。我正在获取wmic的CD ROM驱动器列表并存储它们的驱动器号和标题。如果只有一个CD ROM驱动器,则选择是明确的,因此可以立即开始复制,否则会提示用户。