Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【PowerShell】ファイルをクリップボードに切り取る

検索すると C や VB の記事は出てくるものの PowerShell 版が見つからなかったので。

$target = @("C:\Users\hoge.txt", "C:\Users\fuga.txt")
try {
    $dataObj = New-Object System.Windows.Forms.DataObject
    $dataObj.SetFileDropList($target)
    $byteStream = [byte[]](([System.Windows.Forms.DragDropEffects]::Move -as [byte]), 0, 0, 0)
    $memoryStream = New-Object System.IO.MemoryStream
    $memoryStream.Write($byteStream)
    $dataObj.SetData("Preferred DropEffect", $memoryStream)
    [System.Windows.Forms.Clipboard]::SetDataObject($dataObj, $true)
}
catch {
    Write-Host $_.Exception.Message -ForegroundColor Red
}

こうすると hoge.txtfuga.txt をコンテキストメニューで「切り取り」した状態になり、コピー先のフォルダへの右クリック貼り付けで移動できるようになります。メリットとしてウインドウの数が減ります。

最近は peco でフィルタリングする術を知った ので、下のようなコマンドレットを書いてデスクトップのファイルを UI 選択して……

function Invoke-DesktopItem {
    $arrayList = New-Object System.Collections.ArrayList
    $desktopPath = "{0}\desktop" -f $env:USERPROFILE
    (Get-ChildItem $desktopPath).Name | psPeco -fuzzy | ForEach-Object {
        $item = $desktopPath | Join-Path -childPath $_ | Get-Item
        $arrayList.Add($item) > $null
    }
    return $arrayList
}

このように組み込んでターミナルをエクスプローラ代わりにしています。
psPeco のコードは上記記事参照)

function idx {
    $items = Invoke-DesktopItem
    if (-not $items) {
        return
    }
    $fullnames = @($items.Fullname)
    try {
        $dataObj = New-Object System.Windows.Forms.DataObject
        $dataObj.SetFileDropList($fullnames)
        $byteStream = [byte[]](([System.Windows.Forms.DragDropEffects]::Move -as [byte]), 0, 0, 0)
        $memoryStream = New-Object System.IO.MemoryStream
        $memoryStream.Write($byteStream)
        $dataObj.SetData("Preferred DropEffect", $memoryStream)
        [System.Windows.Forms.Clipboard]::SetDataObject($dataObj, $true)

        Write-Host "CUT item on desktop:" -ForegroundColor Black -BackgroundColor White
        $items | ForEach-Object {
            if ($_.GetType().Name -eq "DirectoryInfo") {
                $color = "Yellow"
            }
            else {
                $color = "Blue"
            }
            "  + '{0}'" -f $_.Name | Write-Host -ForegroundColor $color
        }
    }
    catch {
        Write-Host $_.Exception.Message -ForegroundColor Red
    }
}

ブラウザからのダウンロードや Office ファイルの新規保存時にデスクトップへ保存してしまうことが多いので重宝しています。

AWtnb
神保町で編集者やってます。アナログ大正義の業界で色々模索中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away