Błąd mklink: Nie można utworzyć pliku, gdy ten plik już istnieje

27

Próbuję utworzyć symboliczne łącze na moim 64-bitowym komputerze z systemem Windows 7, aby przekierować dane kopii zapasowej iTunes na inny dysk. Jestem prawie pewien, że składnia jest poprawna, ale nie rozumiem, jak usunąć ten błąd. Próbowałem obu poleceń poniżej, które mają ten sam błąd. Pracuję w oknie poleceń administratora. Czy mogą istnieć jakieś zasady grupy korporacyjnej uniemożliwiające uruchomienie tego polecenia?

mklink /D "C:\Users\odellt1\AppData\Roaming\Apple Computer\MobileSync\Backup" "E:\Apple Computer\MobileSync\Backup" 

lub

mklink /J "C:\Users\odellt1\AppData\Roaming\Apple Computer\MobileSync\Backup" "E:\Apple Computer\MobileSync\Backup"

Błąd

Nie można utworzyć pliku, gdy ten plik już istnieje.

ChiliYago
źródło
który to oryginalny katalog?
Akram Berkawy
oryginalny katalog to C: \ Users \ odellt1 \ AppData \ Roaming \ Apple Computer \ MobileSync \ Backup
ChiliYago
Czy istnieje folder, który łączysz na dysku E? Czy folder o tej samej nazwie co łącze istnieje na dysku C? Czy dysk E jest sformatowany w systemie plików NTFS?
Harry Johnston,
1
Składnia jest poprawna, przed uruchomieniem tej komendy wykonaj następujące czynności. Przenieś całą zawartość bieżącego folderu kopii zapasowej mobilesync do E: \ Apple Computer \ MobileSync \ Backup. Po zakończeniu usuń pusty podfolder kopii zapasowej z „C: \ Users \ odellt1 \ AppData \ Roaming \ Apple Computer \ MobileSync”. Węzeł można utworzyć tylko wtedy, gdy podfolder o tej samej nazwie nie istnieje w lokalizacji.
Karanvir Kang

Odpowiedzi:

29

składnia jest niepoprawna. mklinkma następującą synatx:

mklink [options] <Link> <Target>

Targetto plik / folder, który istnieje i Linkto ten utworzony, który prowadzi do celu.

więc polecenie powinno być:

mklink /D "E:\Apple Computer\MobileSync\Backup"  "C:\Users\odellt1\AppData\Roaming\Apple Computer\MobileSync\Backup"

zobacz ten link do użycia mklink.

Akram Berkawy
źródło
Przeszedłem przez dokumenty i tak krótko, że pomyślałbyś, że nie byłoby problemu z uruchomieniem. Jednak bez powodzenia, nawet odwrócenie linku / celu, tak jak sugerujesz, powoduje wyświetlenie tego samego komunikatu o błędzie.
ChiliYago
1
wtedy powinieneś sprawdzić, czy folder E: \ Apple Computer \ MobileSync \ Backup nie istnieje
Akram Berkawy
1
To się udało. Zauważyłem, że usunięcie pełnej ścieżki spowodowało błąd: „System nie może znaleźć określonej ścieżki”. Więc przywróciłem ścieżkę i usunąłem tylko ostatni folder na ścieżce (Kopia zapasowa), a potem zadziałało.
ChiliYago
1
To nie jest poprawna odpowiedź. Spowoduje to utworzenie linku simlink, który nie przekieruje iTunes na inny dysk. Robi to dokładnie odwrotnie - kieruje inny dysk do folderu kopii zapasowej iTunes.
Vaiden
8

Po prostu usuń folder Kopia zapasowa w oryginalnej kopii zapasowej folderu Apple (w C: \ driver). Po uruchomieniu polecenia:

mklink /J "%APPDATA%\Apple Computer\MobileSync\Backup" "E:\iTune Backups"

Windows utworzy skrót linku Kopia zapasowa w C: \ driver.

Khanh.tq
źródło
2
To jest prawidłowa odpowiedź, która robi to, co OP chciał zrobić
Vaiden
4

Miałem ten sam problem z błędem „plik już istnieje”, dopóki nie użyłem „% AppData%”:

mklink / J "% APPDATA% \ Apple Computer \ MobileSync \ Backup" "E: \ iTune Backups"

Złącze utworzone dla C: \ Users \ Me \ AppData \ Roaming \ Apple Computer \ MobileSync \ Backup << === >> E: \ iTune Backups

Uwaga: Upewnij się, że używasz prostych cudzysłowów, w przeciwnym razie pojawi się błąd polecenia składni.

Franco
źródło
Podoba mi się ta prosta metoda upewnienia się, że foldery źródłowy i docelowy nie są obecne przed utworzeniem połączenia. Utworzenie skrzyżowania powoduje utworzenie folderu źródłowego, ale nie folderu docelowego. Musiałem więc ręcznie utworzyć folder docelowy i wtedy wszystko działa zgodnie z oczekiwaniami.
timoto
To naprawiło to dla mnie, ale miło byłoby mieć wyjaśnienie, dlaczego% AppData% to naprawia.
Aureis,
2

Chciałem tylko dodać, że błąd, o którym wspomniałeś w powyższym komentarzu, System cannot find the path specifiedwydaje się występować, gdy symbolicznie łączysz się z podrzędnym folderem, który nie istnieje w oryginalnym źródle łącza.

Oznacza to, że nie możesz połączyć

"c:\program files (x86)\some folder1\some folder2\"

do celu

"d:\programs\some folder1\some folder2\"

To nie będzie działać, chyba że przynajmniej

"c:\program files (x86)\some folder1"

istnieje jako część źródła linku. Będziesz musiał albo połączyć

"c:\program files (x86)\some folder1"

do

"g:\programs\some folder1" 

lub musisz utworzyć przynajmniej pusty folder w

"c:\program files (x86)\some folder1"

a następnie utwórz link

"c:\program files (x86)\some folder1\some folder2" 

do

"g:\programs\some folder1\some folder2"
Kace36
źródło
Wydaje się to być błędem ze strony Microsoftu, ale ta odpowiedź jest właściwie poprawna. Kiedy link C:\foodo E:` for instance, E: \ foo` musi istnieć, aby cd do C:\foo; jednak kiedy robisz cd, umieszczasz się w E:` -- **not** E: \ foo`. Dzięki za zwrócenie na to uwagi, nigdy bym tego nie rozgryzł.
Qix,