Как поменять диск в символической ссылке?

385
Max Kielland

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

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

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

0
Нет. Вы можете заменить символические ссылки одну за другой, но я бы просто сделал резервную копию файлов оригинального диска C, и пусть копия не будет следовать символическим ссылкам. LPChip 6 лет назад 0
Просто для пояснения: ваши данные находятся на диске G. Вы копируете эти данные на диск C. Есть символические ссылки, которые указывают на диск C, и вы хотите, чтобы они работали должным образом после задания копирования. Это ситуация, или вы копируете данные на третий диск? sippybear 6 лет назад 0

2 ответа на вопрос

1
harrymc

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

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

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

Ну, я достаточно опытен в Win32 API, использующем C / C ++, и у меня также была идея написать небольшую программу для этого. Я просто надеялся, что для этого найдется инструмент. Max Kielland 6 лет назад 0
К сожалению, я не знаю ни одного такого инструмента. Мне также нравится программирование, но в вашем случае я бы попробовал решение для виртуальной машины по одной причине: оно не может уничтожить диск из-за любой моей ошибки. В любом случае я бы посоветовал сделать резервную копию образа диска и, если возможно, использовать его вместо этого. harrymc 6 лет назад 0
0
sippybear

Вместо того, чтобы пытаться изменить все ваши ссылки, вы можете использовать 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команде, чтобы посмотреть и в подпапках.

Да, но мне нужно скопировать и символическую ссылку, так как исходный диск будет уничтожен позже. Max Kielland 6 лет назад 0
@MaxKielland Данные, на которые указывают символические ссылки, существуют на том же диске, что и символические ссылки, или они где-то еще? sippybear 6 лет назад 0
Да, целью всех символьных ссылок является тот же физический раздел (что и C: когда он использовался), но в моей системе, как и на USB-накопителе, он находится на G: но все символические ссылки по-прежнему указывают на C: (не на реальные ссылки). , но абсолютные ссылки). Max Kielland 6 лет назад 0
@MaxKielland Пожалуйста, дайте мне знать, если этот сценарий сработает. sippybear 6 лет назад 0