如何创建PowerShell脚本以将文件复制到USB闪存驱动器?

时间:2011-06-28 00:01:40

标签: windows powershell scripting copy

我有一个虚拟硬盘.vhd文件,我想通过点击Windows Vista笔记本电脑上的快捷方式每天备份。我写了一个半危险批处理脚本文件(BACKUP.BAT)来完成这项工作,它打开cmd窗口并将文件复制到闪存驱动器,但我想模仿(宏)复制显示的方式您手动将文件拖放到我的计算机中的闪存驱动器中。另一个问题是,根据计算机的运行情况,USB闪存驱动器可能有驱动器E:分配给它(WinXP),而在其他计算机(Vista / 7)上它可能是驱动器F:。 (当USB闪存盘插入USB端口时,似乎没有办法静态地为USB闪存盘分配固定的驱动器号。)

2 个答案:

答案 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驱动器。