批处理文件和可变USB驱动器号

S3N*_*N3L 2 batch-file usb-drive drive-letter

我正在尝试创建备份批处理文件以自动执行Acronis True Image和备份维护.

USB驱动器号根据我正在备份的机器和/或连接的设备数量以及使用驱动器号而变化...

我的批次驻留在C:\ 我的批次中将致电ATI.ATI将图像转储到C:\ 批处理中然后根据其卷序列号查找我的外部,如下所示:

SET SN=30BC-F5A4
SET found=

0>NUL SET /P=Searching for external drive...
TIMEOUT 3 /NOBREAK >NUL

FOR %%N IN (D E F G H I J K L M O P Q R S T U V W X Y Z) DO (
IF defined found CALL :MOVE
VOL %%N: 2>NUL | FIND "%sn%" >NUL && CALL :MOVE %%N
)

ECHO  Fail^^!
TIMEOUT 3 /NOBREAK >NUL

ECHO.
ECHO Connect it now and cancel "Autoplay".
TIMEOUT 3 /NOBREAK >NUL

ECHO.
ECHO Press any key to try again...
PAUSE >NUL

CALL: EXTERNAL



:: ***MOVE BACKUP***

:MOVE
Run Code Online (Sandbox Code Playgroud)

好吧,那工作得很好,但我现在需要的是一些东西;

根据序列号查找正确的外部设备.(如上所述)抓住正确的驱动器号并将其转换为变量.FOR IN DO找到驱动器号后突破循环并使其成为变量.使用变量检查文件夹是否存在.如果该文件夹不存在,请创建它.如果该文件夹确实存在,请检查其中是否MyBackup.tib存在.如果是,请删除该文件. CHDIR或者某些回到批处理所在的位置,(C:\)和MOVE新创建的备份到外部的文件夹中.

我将在这个问题上连续工作十个小时,而且我没有找到比起初时更正确的语法/命令.

请,你能帮忙吗??我会给你一个饼干,哈哈!

我正在运行Windows 7 Ultimate,如果这有帮助...

dbe*_*ham 6

序列号是十六进制表示的数字(用逗号表示的短划线用作十进制数字中的千位分隔符).

WMIC volume get driveLetter, serialNumber可用于获取所有驱动器号的列表,其序列号为十进制表示法.您的序列号30BC-F5A4等于十进制817690020.我在命令行上使用以下命令将十六进制SN转换为十进制形式:set /a 0x30BCF5A4.

因此,以下命令将变量设置为外部驱动器的驱动器号(带冒号).

set SN=817690020
set "extDrive="
for /f %%D in ('wmic volume get driveLetter^, serialNumber ^| find "%sn%"') do set extDrive=%%D
if not defined extDrive echo Error finding external drive & exit /b
Run Code Online (Sandbox Code Playgroud)

我不明白你谈到的文件夹名称的来源.我假设你有一个变量,其值以某种方式定义.我只需将变量命名为"folder".

set folder=someFolderName
if not exist "%extDrive%\%folder%\" mkdir "%extDrive%\%folder%"
Run Code Online (Sandbox Code Playgroud)

您可以使用MOVE命令将新创建的备份移动到外部驱动器上的文件夹,如果已存在,则自动覆盖任何现有备份.

move /y "c:\MyBackup.tib" "%extDrive%\%folder%\"
Run Code Online (Sandbox Code Playgroud)