2011-06-28 19 views
2

Windows Vistaのラップトップでショートカットをクリックして、毎日バックアップしたいバーチャルハードディスク.vhdファイルがあります。私は半分ハザードバッチスクリプトファイル(BACKUP.BAT)は、cmdのウィンドウを開き、フラッシュドライブにファイルをコピーするジョブを達成するが、私は(マクロ)コピーを表示する方法を模倣したいと思いますファイルをコンピュータのフラッシュドライブに手動でドラッグアンドドロップします。別の問題は、これが行われたコンピュータに応じて、USBフラッシュドライブにドライブE:が割り当てられ(WinXP)、他のコンピュータ(Vista/7)にF:がドライブされている可能性があるということです。 (固定されたドライブ文字をUSBポートに挿入すると、USBドライブに固定ドライブ文字を静的に割り当てる方法はありません)ファイルをUSBフラッシュドライブにコピーするPowerShellスクリプトを作成するにはどうすればよいですか?

答えて

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 
+0

@Michael:あなたの方法は、ローマンの例よりも信頼性が高いように見えます。週の作業日ごとにフラッシュドライブがあります(ラベル:BACKUP_MON、BACKUP_TUE ...)。曜日に応じて、ユーザーが正しいフラッシュドライブを挿入したかどうかを確認してください!.. robocopy.exeは、進行中のコピーのドラッグ&ドロップ表示でコピーを実行しますか?このpowershellスクリプトをメモ帳に置き、.BAT拡張子で保存して実行しますか?powershellには慣れていません。 –

+0

@Michael:コピーしたいファイルは、常にC:¥Users¥Frank¥My Documents¥My Virtual Machines¥example.vhdにあり、example.vhdを対応するフラッシュドライブにコピーします。私は6つのフラッシュドライブを持っています。毎日1回、BACKUP_MON、BACKUP_TUE ... –

+1

'robocopy'は、ファイルのコピーの進捗率を表示しますが、Windowsではそうではありません。注意: 'robocopy'はWindows XPにあらかじめインストールされていません。 –

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ドライブを使用することができます。


UPDATE は、あなたがこれを行うことができ、タスクのドラッグ&ドロップの部分を完了します。

C(例えば、メモ帳を使用)PowerShellスクリプトを作成します。ファイルのコピーToRemovableDrive.batを(作成

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 

:\ TEMP_110628_041140 \コピーToRemovableDrive.ps1(パスはあなた次第です) )デスクトップに例えば、それはPowerShellスクリプトを使用しています。

powershell -file C:\TEMP\_110628_041140\Copy-ToRemovableDrive.ps1 %1 

今すぐあなたのUSBドライブを接続し、デスクトップでCopy-ToRemovableDrive.batアイコンにファイルをドラッグすることができます。これは、ドラッグしたファイルを接続したばかりのUSBドライブにコピーする必要があります。

+0

**注意:おそらく、このアプローチは、同時に** **使用されている複数のリムーバブルドライブがあり、ランダムにプラグを差し込んだり、取り外したりした場合、期待通りに機能しない可能性があります(最後に差し込まれたドライブを使用することです)。このシナリオでは、最後にプラグインされたドライブは、このコードによってプラグ/プラグシーケンスによって返されません。 –

+0

@Roman:これでC:\ Users \ Frank \ My Documents \ My Virtual Machines \ example.vhdを最後に挿入したUSBフラッシュドライブにコピーし、Vistaの表示方法と同じようにコピー実行を表示するpowershellスクリプトを完成させることができます.vhdをフラッシュドライブにドラッグ&ドロップすると、フラッシュドライブの環境変数をあらかじめ定義しておいて静的に永久ドライブレターを設定することができました。 pluged inまたはout ..私はWindowsキーが異なるドライブ文字を再割り当てする理由を理解していません。 –

+0

@Roman:Powershellにはまったく経験がありません.DOS BATスクリプトだけです。あなたのPowerShellスクリプトをメモ帳に入れて、.BAT拡張子で保存して実行しますか? –

関連する問題