ショートカットファイルの先にあるファイルを、ショートカットファイルがある場所にコピーするpowerShellを考えてみた。
ショートカット先のファイルをバックアップするためにプロパティを開いて「ファイルの場所を開く」ボタンを押して、コピーして貼り付けて、、、を以下にする。
ショートカットファイルを右クリック → 送る → xxxx.cmd
■CoPilotへの指示
以下のPowerShellスクリプトを作って
①ドラッグアンドドロップでショートカットファイルのパスを受け取る
②上記ファイルパスを出力する
③ショートカットファイルが示すファイルパスを取得する。
④ ③で取得したパスのファイルをショートカットファイルがある場所にコピーする。
※この時にファイル名は変更しない。
同じ指示でも違うのが出てきたりするが、一番読みやすそうなのを採用。出てきたpowershellは変更せずそのまま使えた。
ps1ファイルには直接ドラッグアンドドロップができないのでcmdファイルも使う。受け取ったファイルパスをps1ファイルに渡すだけ。
■「ショートカットのファイルをその場にダウンロード.cmd」
@echo off
echo パラメータ=%*
powershell -NoProfile -ExecutionPolicy RemoteSigned -File .\\ショートカットのファイルをその場にダウンロード.ps1 %*
■「ショートカットのファイルをその場にダウンロード.ps1」
# ドラッグアンドドロップでショートカットファイルのパスを受け取る
$shortcutPath = $args[0]
#ショートカットファイルのパスを出力する
Write-Output "ショートカットファイルのパス:$shortcutPath"
#ショートカットファイルがしますファイルパスを取得する。
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutPath)
$targetPath = $shortcut.TargetPath
# ショートカットファイルが指すファイルパスを出力する
Write-Output "ショートカットファイルがさすファイルパス:$targetPath"
#ショートカットファイルがある場所にファイルをコピーする
$destinationPath = Split-Path -Path $shortcutPath
Copy-Item -Path $targetPath -Destination $destinationPath
# コピーしたファイルのパスを出力する
$fileName = Split-Path -Path $targetPath -Leaf
$copiedPath = Join-Path -Path $destinationPath -ChildPath $fileName
Write-Output "コピーしたファイルのパス: $copiedPath"
■使う準備
上記2つのファイルを同じフォルダに置いておく。
「ショートカットのファイルをその場にダウンロード.cmd」ファイルのショートカットファイルをsendtoフォルダにいれておく。
■使い方
ショートカットファイルを右クリック → 送る → ショートカットのファイルをその場にダウンロード.cmd - ショートカット
これでショートカット先のファイルがショートカットファイルのあるフォルダにコピーされる。