我正在尝试创建备份批处理文件以自动执行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
好的,这项工作很好,但我现在需要的是一些事情;
根据序列号查找正确的外部设备。 (如上)
抓住正确的驱动器号并将其转换为变量。
找到驱动器号后突破FOR IN DO
循环并将其变为变量。
使用变量检查文件夹是否存在。
如果文件夹不存在,请创建它。
如果该文件夹确实存在,请检查其中是否存在MyBackup.tib
。
如果是,请删除该文件。
CHDIR
或者某些回到批处理所在的位置,(C:\
)和MOVE
新创建的备份到外部文件夹中。
我在这个问题上连续工作了十个小时,而且我没有找到比起初时更正确的语法/命令。
请,你能帮忙吗?? 我给你一个饼干,哈哈!
我正在运行Windows 7 Ultimate,如果这有帮助......
答案 0 :(得分: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
我不明白您所谈论的文件夹名称的来源。我假设你有一个变量,其值以某种方式定义。我只需将变量命名为“folder”。
set folder=someFolderName
if not exist "%extDrive%\%folder%\" mkdir "%extDrive%\%folder%"
您可以使用MOVE命令将新创建的备份移动到外部驱动器上的文件夹,如果现有备份已存在则自动覆盖。
move /y "c:\MyBackup.tib" "%extDrive%\%folder%\"
答案 1 :(得分:1)
您可以要求提供驱动器信件,如下所示:
假设您需要备份的一些照片位于我们驱动器上的\ b \ c目录中,其字母在计算机之间更改。而且,您希望将照片备份到主驱动器,目录x \ y \ z 在主驱动器上(驱动器C:)</ p>
set /p Path="Enter the drive letter for your drive on this computer. No symbols, just the capital letter"
xcopy /e /v %Path%:\a\b\c c:\x\y\z
你甚至可以要求备份的路径,就像这样......
set /p Path="Enter the drive letter for your removable drive on this computer. No symbols, just the capital letter."
set /p PathBackUp="Enter the path to where you want your data to be backed up on this computer. Start with a backslash."
set /p BackupDrive="Enter the drive letter for your data to be backed up to on this computer. No symbols, just the capital letter."
xcopy /e /v %Path%:\a\b\c %BackupDrive%:%PathBackUp%
或两者......
set /p Path="Enter the drive letter for your removable drive on this computer. No symbols, just the capital letter."
set /p DataPath="Enter the path where your data to be backed up is. Start with a backslash, and don't include the drive letter.
set /p PathBackUp="Enter the path to where you want your data to be backed up on this computer. Start with a backslash, and don't include the drive letter."
set /p BackupDrive="Enter the drive letter for your data to be backed up to on this computer. No symbols, just the capital letter."
xcopy /e /v %Path%:%DataPath% %BackupDrive%:%PathBackUp%
我想这种方式会破坏自动化的目的,但只是一个想法;也许这会有所帮助。
有关xcopy命令和修饰符的详细信息,请参阅http://www.computerhope.com/xcopyhlp.htm
有关set命令的详细信息,请参阅http://www.computerhope.com/sethlp.htm
答案 2 :(得分:0)
这将简单地找到连接到系统的所有USB驱动器。
@echo off
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
echo %%i is a USB drive.
)
)
答案 3 :(得分:0)
我到处搜索并尝试很多东西 - 这是最快最简单的驱动器号切换命令行选项
echo off
set /p Path="Enter the Drive Letter of the source File then press enter___"
set /p Pathde="Enter the Drive Letter of the Destination File then press enter___"
echo on
COPY %path%:\Users\Dell\Desktop\test.txt %pathde%:\test.txt
答案 4 :(得分:0)
我写了一个小型C程序( lpath.exe )来解决更改可移动设备的驱动器号的问题。
这个想法是在相关的USB设备上创建一个目录(可以隐藏)或使用通过Windows资源管理器设置的驱动器/磁盘名称。
lpath 程序检查目录或磁盘名称是否存在,并检查所有可用磁盘,并返回要在批处理文件中使用的当前驱动器号:
在USB磁盘上创建目录:
mkdir f:\USB-DISK1
要解决驱动器号:
lpath USB-DISK1:\myImages\House
当前将USB磁盘分配给驱动器号 g:
时,它返回 g:\ myImages \ House在脚本中使用例如:
setlocal EnableDelayedExpansion
set input=USB-DISK1:\exports\weekly
for /f "tokens=*" %%r in ('echo !input!^| lpath') do set input=%%r
echo resolved directory is: !input!
一种更方便的方法是在lpath.exe程序旁边创建一个 lset.cmd
@echo off
rem
rem lset.cmd - set variable with resolved label path
rem
rem [00] 01.05.2019 CWa Initial Version
rem
if not {%COMPUTERNAME%}=={!COMPUTERNAME!} echo %~n0-ERROR: use this function with 'setlocal EnableDelayedExpansion' only & exit /b 7
rem USAGE: lib\lset variable "path" - set variable with resolved label path
set __lset_path=%~2
for /f "tokens=*" %%r in ('echo !__lset_path!^| "%~dp0lpath"') do set %1=%%r
set __lset_path=
并在主要批处理脚本中使用它,如下所示:
setlocal EnableDelayedExpansion
call lset input USB-DISK1:\exports\weekly
echo resolved directory is: !input!
有关详细手册,请参见:lpath - expand a path containing labels
lpath.exe 和 lset.cmd 的编译版本可以在WA2L/WinTools的 WA2LWinTools \ lib 中找到包。
此解决方案的缺点是,您需要至少一个其他文件与脚本一起分发。