首页 文章

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

提问于
浏览
2

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

2 回答

  • 2

    我将设置光盘的卷名,并检查所有连接的驱动器,并找到具有该卷名称的驱动器 . 以下是我在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
    
  • 3

    此代码最后准备使用可移动驱动器(例如插入的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驱动器而无需知道/设置其名称 .


    UPDATE 要完成任务的拖放部分,您可以执行此操作 .

    创建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驱动器 .

相关问题