Один из компьютеров вышел из дыма, и я подключил HD к USB-адаптеру, чтобы извлечь все пользовательские данные.

USB-накопитель отображается как диск G: но все символические ссылки указывают на исходный диск C: поэтому, когда я копирую все файлы и перехожу на символические ссылки, я в конечном итоге копирую данные со своего собственного диска C:

Есть ли команда (или способ) изменить все символические ссылки на другой диск? Например, вместо того, чтобы заменить символическую ссылку C:\Users\Administrator\fileX.y на G:\Users\Administrator\fileX.y ?

2 ответа2

1

Я не думаю, что можно изменить символическую ссылку, только воссоздать ее. Это потребует написания скрипта или программы для сканирования диска и воссоздания символических ссылок.

Вот идея, которая может быть проще: создайте виртуальную машину и установите этот физический диск G: как его диск C:.

И VMware, и VirtualBox поддерживают физические / необработанные диски:

0

Вместо того, чтобы пытаться изменить все ваши ссылки, вы можете использовать robocopy из командной строки, чтобы скопировать символическую ссылку вместо ее цели.

ROBOCOPY source\path destination\path /E /SL

Эта команда рекурсивно скопирует все каталоги и файлы из вашего источника в пункт назначения (/E) и вместо копирования цели вашей символической ссылки, она скопирует саму ссылку (/SL)

Вы можете перечислить все свои символические ссылки и цели с PowerShell. Этот ответ на StackExchange показывает, как.

dir 'Path\to\examine' -Recurse -Force | ?{$_.LinkType} | Select FullName,LinkType,Target

Вы можете перезаписать существующие ссылки также с помощью powershell.

New-Item -ItemType SymbolicLink -Path "Symbolic\Link\Path" -Target "New\Target\For\Link" -Force

Так что скрипт для модификации всех ссылок в папке будет выглядеть так:

$directory = 'Path\to\your\links'
$links = dir '$directory' -Force | ?{$_.LinkType}
foreach ($link in $links)  
{
    $target = $link.Target.Replace('C:\','G:\')
    $path = $link.FullName
    New-Item -ItemType SymbolicLink -Path "$path" -Target "$target" -Force
}
dir '$directory' -Force | ?{$_.LinkType} | Format-Table FullName,Target

Обязательно измените значение $directory и запустите его из командной строки admin powershell. Вы можете добавить флаг -Recurse к команде dir чтобы также просматривать вложенные папки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .