Moje ulubione to użycie klasy .Net [IO.DirectoryInfo], która zajmuje się niektórymi elementami logiki. Używam tego do wielu podobnych wyzwań związanych ze skryptami. Posiada metodę .Create(), która tworzy katalogi, które nie istnieją, bez błędów, jeśli tak.
Ponieważ jest to nadal problem dwuetapowy, używam aliasu foreach, aby był prosty. W przypadku pojedynczych plików:
[IO.DirectoryInfo]$to |% {$_.create(); cp $from $_}
Jeśli chodzi o twój plik multi/katalog, użyłbym RoboCopy ponad xcopy. Usunąć „*” z listy i po prostu korzystać z:
RoboCopy.exe $from $to *
Można jeszcze dodać/P (recurse),/e (Rekurencyjnie tym Pusty), i istnieje 50 innych przydatnych przełączników.
Edytuj: Wracając do tego, jest to lakoniczne, ale niezbyt czytelne, jeśli często nie używasz kodu.Zazwyczaj mam go podzielić na dwie części, tak jak poniżej:
([IO.DirectoryInfo]$to).Create()
cp $from $to
Również DirectoryInfo jest typem nieruchomości dominującej FileInfo, więc jeśli $ do jest plikiem, można z nich korzystać razem:
([IO.FileInfo]$to).Parent.Create()
cp $from $to
PowerShell jest tak łatwe, gdy ktoś go zna :) – stej
to działa dla całych katalogów, ale co jeśli ja tylko kopiowanie pojedynczych plików (tak mogę mieć st na nas)? Jak skopiować plik c: \ test1 \ plik.txt do katalogu c: \ test2 \ plik.txt, gdy nie istnieje c: \ test2? Tak naprawdę muszę wiedzieć, jak to zrobić. Dzięki, Gary –
Wpadłem na ten sam problem i rozwiązałem go, najpierw wywołując nowy element: 'New-Item -Force $ to' ' Copy-Item -Force $ od $ to' – rjschnorenberg