Mam źródło katalogu z niektórymi plikami, które chciałbym skopiować do folderu docelowego. Miejsce docelowe może istnieć i może już zawierać pliki. Wszelkie pliki o takich samych nazwach jak pliki źródłowe powinny zostać zastąpione.
Jeśli uruchomię to w Powershell:
Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse
Następnie pierwszy wiersz tworzy folder .\Destination
i kopiuje .\Source
do niego, co chciałbym powtórzyć następnym razem. Jednak zamiast tego drugi wiersz jest kopiowany .\Source
do nowego .\Destination
folderu (tworzenie .\Destination\Source
), a następnie trzeci wiersz jest .\Destination\Source
ponownie nadpisywany .
Jak mogę sprawić, żeby cały czas działał tak jak w pierwszym przypadku? To znaczy, zastąpić .\Destination
zamiast kopiować do niego?
windows-7
powershell
Douglas
źródło
źródło
if exists
łatwością poradzi sobie z tym problemem i nie będzie wymagać wymuszonego rekurencyjnego usuwania miejsca docelowego, co wiąże się z własnymi zagrożeniami.Odpowiedzi:
Problem w tym, że
działa tylko, jeśli
bar
nie istnieje idziała tylko, jeśli
bar
istnieje. Aby obejść ten problem, musisz upewnić się, żebar
istnieje, zanim cokolwiek zrobiszźródło
Jeśli chcesz tylko skopiować zawartość folderu „źródłowego” użyj
źródło
destination
już istnieje.Odpowiedź Stevena Penny'ego https://superuser.com/a/742719/126444 nie usuwa oryginalnej zawartości katalogu docelowego, a jedynie dołącza się do niego. Musiałem całkowicie zastąpić folder docelowy zawartością źródła i utworzyłem 2 funkcje:
źródło
Powiedzmy, że masz następującą strukturę katalogów
korzeń
W folderze głównym możesz osiągnąć pożądane wyniki, wykonując następującą sekwencję poleceń:
$files = gci ./folder_b -name
cp ./folder_a/*.txt -Exclude $files ./folder_b
Zostanie skopiowany tylko plik c.txt
źródło