Czy w systemie Windows, mając nowy plik „foo.txt”, mogę rekurencyjnie przeszukiwać katalog w poszukiwaniu plików pasujących do tej nazwy pliku i zastępować je nowym plikiem?

0

Jeśli mam plik C:\foo.txt, chcę rekurencyjnie wyszukiwać C:\OtherDirpasujące pliki foo.txti zastępować je C:\foo.txt.

czy to możliwe?

Geesh_SO
źródło
Tak, jest to możliwe przy użyciu polecenia for. Czego próbowałeś do tej pory i gdzie utknąłeś?
LPChip
Prawidłowe pytanie, problem z udzieloną próbą odpowiedzi polega na tym, że tak naprawdę nie byłem pewny, od czego dokładnie zacząć :( Gdyby to był Linux, zrobiłbym coś takiego, find . -iname "foo.txt" -exec cp foo.txt "{}" \;więc sądzę, że postarałem się zastosować podobny wzór. Wczoraj byłem trochę zestresowany, ale
spróbuję
Myślałem również o użyciu xargs, ale nie sądzę, że Windows ma odpowiednik.
Geesh_SO,
Myślę, że rozumiem. for /f "delims=" %A in ('dir /s/b foo.txt') do copy /Y foo.txt "%A"Wydaje mi się, że to działa, ale czy w tym poleceniu są jakieś „gotchas”? Czy twoje rozwiązanie było inne?
Geesh_SO,

Odpowiedzi:

0

Możesz użyć polecenia DOS REPLACE

REPLACE [d:] [ścieżka] nazwa pliku [d:] [ścieżka] [/ A] [/ P] [/ R] [/ S] [/ U] [/ W]

Cel: Zastępuje przechowywane pliki plikami o tej samej nazwie z innej lokalizacji przechowywania.

To polecenie zastępuje pliki w oznaczeniu ścieżki docelowej plikami o tej samej nazwie w lokalizacji źródłowej. Za pomocą symboli wieloznacznych (? I *) można wskazać grupy nazw plików w katalogach źródłowych. NIE MOŻNA użyć tego polecenia do zastąpienia ukrytych plików lub plików systemowych.

Opcje

/ A - Dodaje pliki określone przez oznaczenie ścieżki źródłowej, które NIE istnieją w oznaczeniu ścieżki docelowej. Korzystając z tej opcji, możesz selektywnie dodawać pliki do katalogu: nie wpłynie to na plik w oznaczeniu ścieżki źródłowej, który ma taką samą nazwę jak plik w oznaczeniu docelowym. Tej opcji nie można używać w połączeniu z opcją / S.

/ P - Wyświetla monit przed zastąpieniem każdego pliku, umożliwiając podejmowanie decyzji na podstawie pliku po pliku, czy zezwolić na zastąpienie.

/ R - zastępuje zarówno pliki tylko do odczytu, jak i niechronione w katalogu docelowym. Bez tej opcji każda próba zastąpienia pliku tylko do odczytu spowoduje wyświetlenie komunikatu o błędzie i proces wymiany zostanie zakończony.

/ S - Działa zarówno w katalogu docelowym, jak i we wszystkich podkatalogach w katalogu docelowym. Nie można używać opcji / A razem z tą opcją.

/ U - zastępuje pliki na dysku docelowym lub w katalogu, które są starsze niż ich odpowiedniki na dysku źródłowym.

/ W - czeka na włożenie dysku przed rozpoczęciem procesu wymiany.

Przykłady

zamień * .dat a: / u

„/ U” jest bardzo ważne. Oznacza „aktualizuj” i mówi komendzie replace, aby skopiowała tylko te pliki źródłowe, które (a) znajdują się również w katalogu docelowym i które (b) są nowsze niż ich odpowiedniki w katalogu docelowym.

Możesz także użyć replace, aby skopiować tylko te pliki, które nie istnieją w katalogu docelowym - to znaczy tylko nowe pliki. Na przykład:

zamień * .dat a: / a

Jest to interpretowane jako „skopiuj na dysk a: wszystkie pliki w bieżącym katalogu z rozszerzeniem„ .dat ”, które nie są jeszcze obecne na dysku a:.

Aby zachować aktualną kopię zapasową wszystkich plików w danym katalogu na dysku twardym, możesz użyć następującej pary poleceń zamiany razem:

zamień c: \ india a: \ india / u

zamień c: \ india a: \ india / a

bobkush
źródło