Muszę skopiować wszystkie pliki *.doc
(ale nie foldery, których nazwy odpowiadają *.doc
) z folderu sieciowego \\server\source
(w tym pliki we wszystkich zagnieżdżonych folderach) do folderu lokalnego C:\destination
bez zachowania hierarchii zagnieżdżonych folderów (tzn. Wszystkie pliki powinny być bezpośrednio C:\destination
i nie powinny być tworzone zagnieżdżone foldery w C:\destination
). W przypadku, gdy istnieje kilka plików o tej samej nazwie z różnych podfolderów \\server\source
, tylko pierwsza powinna zostać skopiowana i nigdy nie nadpisywana - wszystkie konflikty znalezione później powinny zostać pominięte (może być wiele takich przypadków, a pominięte pliki powinny nie mogą być przekazywane przez sieć, w przeciwnym razie zajmie to zbyt dużo czasu). Oto moja próba wdrożenia go w PowerShell:Jak kopiować określone pliki (bez hierarchii folderów), ale nie zastępuj istniejących plików?
cp \\server\source\* -Recurse -Include *.doc -Container:$false -Destination C:\destination
Istnieją co najmniej dwa problemy z tym poleceniem:
- It kopiuje foldery, których nazwy odpowiadają
*.doc
też. - W przypadku konfliktów nazw każdy plik znaleziony później jest przesyłany przez sieć i zastępuje poprzedni.
Czy możesz zasugerować, jak rozwiązać te problemy?
Implementacje przy użyciu copy
, xcopy
, robocopy
, cscript
lub *.bat
, *.cmd
są również mile widziane.
Lokalny system operacyjny to Windows 8, a system plików to NTFS.
Jakie jest oczekiwane zachowanie, jeśli skrypt działa dwukrotnie? Czy powinien jeszcze raz skopiować wszystko? A może nie powinien niczego kopiować? –
@splatteredbits Katalog docelowy może być początkowo pusty. Jeśli ten warunek nie powiedzie się, zachowanie skryptu może być niezdefiniowane. –