Soru Robocopy, mevcut dosyaların üzerine yazmayın, değiştirilen / yeni olanları kopyalayın.


Hedef dizinindeki dosyaları yeni / değiştirilmiş / silinmiş dosyalar ile üzerine yazmadan iki dizini yansıtmak mümkün mü? Anlık görüntüler gibi bir şey.

Örnek: Kaynak dizini, tüm dosyalar ve alt dizinler ile hedef dizine kopyalayın, ancak hedef dizin içeriyorsa, örneğin, dosya A.xls ve A.xls kaynak dizininde değiştirildi ve kopyalandı A.xls ama önceki tutmak A hedef dizinde de. Önceki dosyayı bir tarih damgası korumak için veya dosya adına sayaç eklenebilir.

Kopyanın ardından örnek:
SomeDirectory
| --A.xls
| --A_20120701.xls
| --A_20120920.xls

Teşekkür ederim.


5
2017-09-24 11:31


Menşei




Cevaplar:


Hayır, bu Robocopy kullanarak mümkün değil. Robocopy kullanarak bir klasör yolunu yansıtmak, kaynakta artık yoksa, hedefteki dosyaları siler. Eski sürümleri olan dosyaların üzerine yazmadığınızdan emin olabilirsiniz, ancak kopyalama işlemi sırasında daha eski sürümleri / yeniden adlarını tutamazsınız.

Değiştirilmiş dosyaları kopyalayan bir komut dosyası / toplu iş dosyası yazdım, ancak komut dosyasının çalıştırıldığı tarihe göre ağaç yapısını oluşturur

Örneğin. Belirli bir dosya için ağacım olurdu.

c:\_archive\201209\
                    23\
                        0930
                             Todays notes.txt
                        1145
                             Todays notes.txt
                    24\
                        1000
                             Todays notes.txt

Yararlı bulabilirseniz, bu senaryodan bir örnek gönderebilirim.

Popüler talep nedeniyle, lütfen temel yedekleme komutumu aşağıda bulabilirsiniz.

@echo off
cls
rem parse the output of the date /t command to create a date in the format yyyymmdd, and also remove the delimiter (/)
rem  store the results in environment variables
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DATE=%%k%%j%%i 
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_YEAR=%%k
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_MONTH=%%j
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DAY=%%i

echo date %Z_DATE%
echo year %Z_YEAR%
echo month %Z_MONTH%
echo day %Z_DAY%

rem parse the output of the time /t command to remove the delimeter (:)
rem  store the result in an environment variable
for /f "tokens=1,2 delims=:. " %%i IN ('time /t') do SET Z_TIME=%%i%%j

echo time %Z_TIME%
rem change the colour to a nice deep green on black.
color 02
::-------------------------

@echo on
xcopy "c:\MyFiles\*.*" "C:\MyArchive\ByDate\%Z_YEAR%%Z_MONTH%\%Z_DAY%\%Z_TIME%%~p1%~n1\" /ksymhr
@if @@ERRORLEVEL==1 SET Z_BACKUP_ERROR_FLAG=1

Goto End

::---------------------------------------------------------------------------
:NotifyUser
echo.
echo An error occurred during the backup.
echo.
pause

::---------------------------------------------------------------------------
:End

echo %Z_DATE%
echo %Z_TIME%
time /t

rem Clear out the environment variables
SET Z_DATE=
SET Z_TIME=
SET Z_BACKUP_ERROR_FLAG=

Bu betikle ilgili herhangi bir sorunuz varsa (ana yedekleme komutumdan hızlı bir şekilde alıntıladım ve iyice test etmedim), bana gmail hesabımda 'Server Fault Backup Script query' konu satırı ile e-posta gönderin. Eğer gmail adresini soramazsan, sana yardım etmekten mutluluk duyarım.


5
2017-09-24 11:53



Teşekkürler, havalı geliyor, senaryonuzu görmek güzel olurdu. Lütfen yayınla. - I don't know.
senaryonuzu ekleyebilir misin lütfen? Teşekkürler. - I don't know.


Tarih, yıl, ay ve gün ayrıştırmak için satırlar benim için işe yaramadı. Ancak, bunlar yaptı ve betiğin geri kalanı mükemmel çalışıyor:

Set Z_Date =% date: ~% 10,4% date: ~% 4,2% date: ~% 7,2

Set Z_Year =% date: ~% 10,4

Set Z_Month =% date: ~% 4,2

Set Z_Day =% date: ~% 7,2


0
2018-05-25 09:34