Ben ettik okumak ki (bir yerde) Robocopy varsayılan olarak mevcut dosyaları üzerinde kopyalama atlar.
Ama ... Bunun için hiçbir Komut Satırı anahtarı bulamıyorum .
Ben ettik okumak ki (bir yerde) Robocopy varsayılan olarak mevcut dosyaları üzerinde kopyalama atlar.
Ama ... Bunun için hiçbir Komut Satırı anahtarı bulamıyorum .
Yanıtlar:
robocopy SOURCE DESTINATION FILE(S) /IS
Nerede IS
açılımı Ben nclude S ame dosya (lar). Bu anahtarın kullanılması, mevcut dosyaların üzerine yazılmasına neden olur. Aşağıya bakınız:
::
:: File Selection Options :
::
/A :: copy only files with the Archive attribute set.
/M :: copy only files with the Archive attribute and reset it.
/IA:[RASHCNETO] :: Include only files with any of the given Attributes set.
/XA:[RASHCNETO] :: eXclude files with any of the given Attributes set.
/XF file [file]... :: eXclude Files matching given names/paths/wildcards.
/XD dirs [dirs]... :: eXclude Directories matching given names/paths.
/XC :: eXclude Changed files.
/XN :: eXclude Newer files.
/XO :: eXclude Older files.
/XX :: eXclude eXtra files and directories.
/XL :: eXclude Lonely files and directories.
/IS :: Include Same files.
/IT :: Include Tweaked files.
Varsayılan olarak, Robocopy, dosyaların belirli meta verileri eşleşirse mevcut dosyaları kopyalamayı atlar, ardından bu dosyalar kopyalama işleminden atlanır.
@ Mklement0 tarafından belirtildiği gibi, /COPY:DAT
[LastWriteTime] ve dosya boyutu aynıysa ve bu varsayılan bir atlama ise , zımni varsayılan farklı veriler içeren dosyalara kopyalamaz.
Bu nedenle, bir nedenden dolayı, verileriniz farklı olsa bile, eşleşen dosya boyutuna, dosya adına ve en son değiştirilmiş özniteliklere sahip iki dosyaya sahipseniz, kaynak dosyayı kopyalamaz.
Robocopy Varsayılan Seçenekler:
/DCOPY:DA /COPY:DAT /R:3 /W:1
/COPY:copyflag[s] : What to COPY (default is /COPY:DAT)
(copyflags : D=Data, A=Attributes, T=Timestamps
S=Security=NTFS ACLs, O=Owner info, U=aUditing info).
/COPY
argümanı ile ilgisi yoktur . Spesifik olarak, sadece bir dosyanın boyutu ve en son değiştirilen zaman damgası önemli görünüyor.
/COPY
aktardığınız, aynılığı belirleme açısından önemli değil - yalnızca hedef dosya farklı kabul edilirse kopyalanacak olanlara uygulanır .
/COPY
aynıdır: Robocopy'nin hangi dosyaların atlanacağını belirlemek için kullandığı, gerçek anlamda bir algoritma tanımlayamayan kırmızı bir ringa balığı olduğu gerçeği ile /COPY
.
$file.FullName.ForEach{(Get-Item $_).LastWriteTime=$(Get-Date)}
tam olarak "aynı boyutta" ve "aynı dosya adı" olan aaaaa2
ve aynı aaaaa5
içeriğe sahip olmayan dosyalar için aynı olduğunuzu onayladım . Robocopy
Belirtilen varsayılan /COPY:DAT
değerinin doğru olduğu komutuyla hiçbir seçenek kullanmamak , zaman damgası ve dosya boyutu aynı olduğunda veriler farklı olduğunda dosyaları kopyalamaz. Varsayılan değer hala /COPY:DAT
belgelerde belirtildiği gibidir ve komutun çıktı sonuçları ne olursa olsun gösterilir.
Ne yazık ki, resmi belgeler hangi dosyaların varsayılan olarak atlandığının arkasındaki mantığı tanımlamıyor .
Resmi olmayan ss64.com belgeleri , ancak, önemli gösterici sağlar (vurgu vurgulu):
Robocopy varsayılan olarak yalnızca kaynak ve hedef farklı zaman damgalarına veya farklı dosya boyutlarına sahipse bir dosyayı kopyalar .
Not: zaman damgası en son değiştirilmiş zaman damgasını gösterir (sadece).
Başka bir deyişle: Robocopy olmak iki dosya gördüğü aynı merkezli sadece onların son değiştirilme zaman damgaları ve dosya boyutları özdeş olup olmamasına ve bu nedenle atlar durumunda kopyalama.
Söyleyebileceğim şey:
Bu davranış olduğunu değil bir dosya / dizinin hangi yönlerini değiştirerek etkilenen kopyalamak (parametreler /COPY
/ DCOPY
)
Varsayılan aynılık algılamayı (aynı son değiştirilmiş zaman damgası ve aynı dosya boyutu) aşağıdaki özelliklere genişletmek istiyorsanız , ( Tweaked Dahil ) seçeneğini kullanın:/IT
A
/ COPY parametresi için temsil edilir )S
için temsil edilir /COPY
)O
için temsil edilir /COPY
)U
için temsil edilir /COPY
)Robocopy sunuyor görünüyor hayır onların dayalı dosyaların aynılığı tespit seçeneği içeriği (genellikle bir üzerinden uygulanmaktadır kriptografik hash fonksiyonu ).
Bu nedenle, ender olarak son değiştirilen zaman damgalı ve içeriğinde farklılık gösteren aynı dosya boyutlarına sahip dosyalar olabileceği ender durumlarda , tek seçeneğiniz /IS
( Aynı İçeriği ) seçeneğini kullanmaktır:
Bu, aynı şekilde değerlendirilen dosyaların koşulsuz olarak kopyalanmasına ve dolayısıyla potansiyel olarak gereksiz yere neden olur.
Uyarı : İlginçtir ki, son değiştirilme dosya damgası ve dosya boyutu bakımından aynıdır dosyalar ancak yukarıda belirtilen özellikleri bakımından farklılık vardır değil varsayılan olarak dahil /IS
tek başına; bu nedenle, tüm olasılıkları karşılamak için kullanın /IS
ve /IT
birleştirin .
Aşağıdaki Pester testleri davranışları göstermektedir; kodu farklı kaydet Tests.ps1
ve şu şekilde çağır Invoke-Pester ./Tests.ps1
:
Describe RoboCopySkippedFilesTests {
BeforeAll {
Push-Location TestDrive:
}
AfterAll {
Pop-Location
}
BeforeEach {
# Set up a source and a destination folder and make their
# Content the same.
if (Test-Path dest) { Remove-Item -Force -Recurse dest }
$null = New-Item -Type Directory -Force src
'file1' > src\file1
'file2' > src\file2
Copy-Item -Recurse src dest
}
It "Does not copy anything with identical folders." {
robocopy.exe src dest
$LASTEXITCODE | Should Be 0
}
It "Does recognize a changed last-modified filestamp" {
(gi src\file1).LastWriteTime = [datetime]::now
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 1
}
It "Does recognize a change in file size" {
'!' | Add-Content dest\file1
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 1
}
It "Does not recognize a change in file content, with size and last-modified date identical" {
'file!' > dest\file1
(Get-Item dest\file1).LastWriteTime = (Get-Item src\file1).LastWriteTime
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 0
}
It "Does not recognize a change in file attributes, with size and last-modified date identical" {
(Get-Item dest\file1).Attributes = 'System'
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 0
}
It "Does recognize an attribute-modified-only file as tweaked (/IT)" {
(Get-Item dest\file1).Attributes = 'System'
robocopy.exe src dest /IT # | Out-Host
$LASTEXITCODE | Should Be 1
}
It "Does not include an attribute-modified-only file with /IS" {
Remove-Item src\file2, dest\file2
(Get-Item dest\file1).Attributes = 'System'
robocopy.exe src dest /IS # | Out-Host
$LASTEXITCODE | Should Be 0
}
}
Tüm testlerin geçtiğini ( Robocopy.exe
dosya sürümünde olduğu gibi 10.0.16299.15 (WinBuild.160101.0800)
) gösteren aşağıdakilere benzer bir şey görmelisiniz :
Describing RoboCopySkippedFilesTests
[+] Does not copy anything with identical folders. 231ms
[+] Does recognize a changed last-modified filestamp 112ms
[+] Does recognize a change in file size 68ms
[+] Does not recognize a change in file content, with size and last-modified date identical 69ms
[+] Does not recognize a change in file attributes, with size and last-modified date identical 83ms
[+] Does recognize an attribute-modified-only file as tweaked (/IT) 65ms
[+] Does not include an attribute-modified-only file with /IS 70ms
Tests completed in 589ms
Passed: 7 Failed: 0 Skipped: 0 Pending: 0 Inconclusive: 0
aaaaa2
ve aaaaa5
biraz önce bahsettiğim ve şimdi Robocopy üzerine kopyalamak ve farklı tanıdınız görünüyor örneğin . Createtime'ın kaynak dosyada dest dosyadan daha eski olduğundan ve hala kopyalandığından bile eminim. Sanırım dün testimin bir denetlemesi oldu çünkü bunu tekrar üretemiyorum ve varsayılan DAT veri içeriği farklarını algılamak ve kaynak dosyaya kopyalamak için doğru gözüküyor. Garip ya da ne !!