我有一个虚拟硬盘.vhd文件,我想通过点击Windows Vista笔记本电脑上的快捷方式每天备份。我写了一个半危险批处理脚本文件(BACKUP.BAT)来完成这项工作,它打开cmd窗口并将文件复制到闪存驱动器,但我想模仿(宏)复制显示的方式您手动将文件拖放到我的计算机中的闪存驱动器中。另一个问题是,根据计算机的运行情况,USB闪存驱动器可能有驱动器E:分配给它(WinXP),而在其他计算机(Vista / 7)上它可能是驱动器F:。 (当USB闪存盘插入USB端口时,似乎没有办法静态地为USB闪存盘分配固定的驱动器号。)
答案 0 :(得分:3)
我会设置光盘的卷名,并检查所有连接的驱动器并找到具有该卷名的驱动器。以下是我在PowerShell中的工作方式:
param([parameter(mandatory=$true)]$VolumeName,
[parameter(mandatory=$true)]$SrcDir)
# find connected backup drive:
$backupDrive = $null
get-wmiobject win32_logicaldisk | % {
if ($_.VolumeName -eq $VolumeName) {
$backupDrive = $_.DeviceID
}
}
if ($backupDrive -eq $null) {
throw "$VolumeName drive not found!"
}
# mirror
$backupPath = $backupDrive + "\"
& robocopy.exe $SrcDir $backupPath /MIR /Z
答案 1 :(得分:2)
此代码最后准备使用可移动驱动器(例如插入的USB驱动器):
$drives = [System.IO.DriveInfo]::GetDrives()
$r = $drives | Where-Object { $_.DriveType -eq 'Removable' -and $_.IsReady }
if ($r) {
return @($r)[-1]
}
throw "No removable drives found."
这种方式不需要预先设置固定卷名。我们可以在不知道/设置名称的情况下使用不同的USB驱动器。
<强>更新强> 要完成任务的拖放部分,您可以执行此操作。
创建PowerShell脚本(例如,使用记事本)C:\ TEMP_110628_041140 \ Copy-ToRemovableDrive.ps1(路径由您决定):
param($Source)
$drives = [System.IO.DriveInfo]::GetDrives()
$r = $drives | Where-Object { $_.DriveType -eq 'Removable' -and $_.IsReady }
if (!$r) {
throw "No removable drives found."
}
$drive = @($r)[-1]
Copy-Item -LiteralPath $Source -Destination $drive.Name -Force -Recurse
创建文件Copy-ToRemovableDrive.bat(例如在桌面上),它使用PowerShell脚本:
powershell -file C:\TEMP\_110628_041140\Copy-ToRemovableDrive.ps1 %1
现在您可以插入USB驱动器并将文件拖到桌面上的Copy-ToRemovableDrive.bat
图标。这应该将拖动的文件复制到刚插入的USB驱动器。