Robocopy มอนิเตอร์ไฟล์ในเวลาที่เพิ่มขึ้นน้อยกว่าหนึ่งนาทีหรือไม่?


10

Robocopyมีตัวเลือกในการตรวจสอบไดเรกทอรีต้นทางและคัดลอกไฟล์ใด ๆ ที่มีการเปลี่ยนแปลง คุณสามารถระบุจำนวนการเปลี่ยนแปลงในไดเรกทอรีที่จะเกิดขึ้นก่อนที่จะคัดลอก ( /mon nโดยที่nจำนวนการเปลี่ยนแปลง) และระยะเวลาที่จะรอก่อนที่จะสแกนอีกครั้ง ( /mot tซึ่งtเป็นเวลาที่จะรอในนาที)

ฉันต้องการตรวจสอบโฟลเดอร์เกือบอย่างต่อเนื่องเนื่องจากมีเพียงไฟล์เดียวที่ฉันสแกนและฉันต้องการให้การเปลี่ยนแปลงเป็นแบบทันที ฉันไม่สามารถสร้างหน้าจอ robocopy สำหรับช่วงเวลาที่น้อยกว่าหนึ่งนาที ฉันพยายาม/mot 0.5แล้วและก็ล้มเหลว ฉันยังลอง/mot 0และ robocopy เพิ่งออกหลังจากการสแกนหนึ่งครั้งโดยไม่มีการตรวจสอบอย่างต่อเนื่อง

ฉันจะทำให้ robocopy สแกนโฟลเดอร์ใกล้ ๆ กันได้อย่างไรโดยเพิ่มเวลาน้อยกว่า 1 นาที อีกวิธีหนึ่งมีเครื่องมือบรรทัดคำสั่งอื่น ๆ ที่สามารถตรวจสอบแหล่งที่มาของไฟล์และคัดลอกการเปลี่ยนแปลงตามเวลาจริงได้หรือไม่?


จะต้องเป็น Robocopy หรือไม่?
Ƭᴇcʜιᴇ007

@ techie007 หากมีสิ่งอื่นที่บรรลุความต้องการเดียวกันนั่นอาจจะใช้ได้แม้ว่าฉันจะหลีกเลี่ยงเครื่องมือของบุคคลที่สามถ้าเป็นไปได้ แต่ถ้ามีทางออกที่สมบูรณ์แบบนั่นคือบุคคลที่สามฉันยินดีที่จะพิจารณามัน
nhinkle

@ techie007 - ฉันมีปัญหาที่แน่นอนเหมือนกับ nhinkle และฉันกำลังใช้ Robocopy ในลักษณะเดียวกัน หากคุณรู้วิธีการแก้ปัญหาทางเลือกที่ทำงานได้ดีบน Windows ฉันเปิดให้มัน กรุณาแบ่งปันกับเรา
Durden81

กำลังทดสอบ Freefilesync เดี๋ยวนี้ .. ดูเหมือนว่าเป็นเครื่องมือที่ฉันต้องการ
Durden81

คำตอบ:


8

robocopy

/mot:<M>
Monitors source, and runs again in M minutes if changes are detected.

เพราะมันยอมรับอาร์กิวเมนต์เพียงไม่กี่นาทีฉันคิดว่าคุณไม่สามารถบังคับให้มันทำงานบ่อยขึ้นได้ อย่างไรก็ตามคุณสามารถเรียกใช้งานได้โดยใช้ไฟล์แบตช์และปล่อยให้เวลาและการวนลูปเกิดขึ้นในแบทช์ไฟล์หรือในงานที่กำหนดไว้มากกว่าภายใน robocopy


1
ใช่ฉันใช้ "ping -n 1 -w 500 1.2.3.4> NUL" เพื่อนอนหลับครึ่งวินาทีจากนั้นวนรอบด้วย a: LABEL และคำสั่ง GOTO (ในคำสั่ง cmd)
Stig Eide

13

แท็กของคุณรัฐคุณกำลังใช้ Windows 8 นี้เป็นสิ่งที่ดีเพราะคุณมีเครื่องมือที่ดีที่เป็น PowerShell และ cmdlet Register-ObjectEventที่มีประโยชน์น้อยชื่อ

สร้างไฟล์ข้อความเปลี่ยนนามสกุลเป็น.ps1วางสคริปต์ด้านล่างลงในไฟล์ เปลี่ยน$watchedFolderตัวแปรเป็นโฟลเดอร์ที่คุณต้องการดู เปลี่ยนฟังก์ชัน Do-Something เพื่อรวมคำสั่ง robocopy ของคุณหรืออะไรก็ตาม เรียกใช้สคริปต์ตราบใดที่สคริปต์กำลังเรียกใช้ฟังก์ชันนั้นจะทำงาน (เกือบจะทันที!) เมื่อใดก็ตามที่มีการเปลี่ยนแปลงไฟล์หรือโฟลเดอร์ในโฟลเดอร์ที่เฝ้าดู

คุณสามารถให้สคริปต์นี้ทำงานเมื่อเริ่มต้น windows และมันจะทำงานในพื้นหลังตลอดเวลาโดยไม่ต้องใช้ตัวจับเวลา

$block = {    
    function Do-Something
    {
        param ($message, $event)
        # function to call when event is raised
        # do a robocopy or whatever

        Start-Process cmd.exe "/C echo $("{0} {1}" -f $event.SourceEventArgs.FullPath, $message)&pause"
    }

    $watchedFolder = "C:\Users\Admin-PC\Desktop"
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $watchedFolder

    Register-ObjectEvent -InputObject $watcher -EventName Created -SourceIdentifier File.Created -Action { Do-Something "Created" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Deleted -SourceIdentifier File.Deleted -Action { Do-Something "Deleted" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Changed -SourceIdentifier File.Changed -Action { Do-Something "Changed" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Renamed -SourceIdentifier File.Renamed -Action { Do-Something "Renamed" $event }
}

$encodedBlock = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($block))

Start-Process PowerShell.exe -verb Runas -argumentlist '-WindowStyle Hidden', '-NoExit', '-EncodedCommand', $encodedBlock

เห็นมันในการดำเนินการ


  1. เรียกใช้สคริปต์ที่บันทึกไว้
    เรียกใช้สคริปต์ที่บันทึกไว้

  2. คุณจะเห็นแฟลชหน้าต่างคอนโซลหลังจากพวกเขาปิดตัวบ่งชี้เดียวที่กำลังทำงานอยู่จะเป็นกระบวนการใหม่สองสามอย่าง
    ป้อนคำอธิบายรูปภาพที่นี่

  3. ทำบางสิ่งบนเดสก์ท็อปของคุณเพื่อทดสอบ
    ป้อนคำอธิบายรูปภาพที่นี่

  4. จบกระบวนการ PowerShell ที่สร้างขึ้นเมื่อคุณไม่ต้องการให้เรียกใช้อีกต่อไป

ข้อมูลความเป็นมาบางอย่าง - ในกรณีที่คุณไม่คุ้นเคยกับเครื่องมือที่ใช้ในคำตอบนี้


  • สำหรับข้อมูลเพิ่มเติมเกี่ยวSystem.IO.FileSystemWatcherกรุณาเยี่ยมชมของหน้า MSDN
  • สำหรับตัวอย่างเพิ่มเติมบางส่วนของเหตุการณ์ใน PowerShell เยี่ยมชมบล็อกของผมพบว่ามีประโยชน์
  • สำหรับไพรเมอร์ใน Windows PowerShell ฉันพบว่าไซต์นี้มีประโยชน์ (ฉันชอบเคล็ดลับประจำวัน)
  • หากคุณกำลังใช้ Windows รุ่นเก่าหรือด้วยเหตุผลบางอย่างที่คุณไม่ได้มีการติดตั้ง PowerShell คุณสามารถดาวน์โหลดWindows จัดการ 4.0

1
นี่คือคำตอบที่ดีที่สุด โซลูชันนี้เป็นตัวขับเคลื่อนเหตุการณ์ซึ่งหมายความว่าจะไม่ใช้ cpu จนกว่าการเปลี่ยนแปลงจะเกิดขึ้นจากนั้นโปรแกรมจะทำงานทันทีในการตอบสนอง นอกจากนี้การเขียนที่ยอดเยี่ยม
CoolHandLouis

5

DSynchronizeเป็นยูทิลิตี้แบบสแตนด์อโลนที่ให้คุณซิงโครไนซ์โฟลเดอร์อย่างน้อยสองโฟลเดอร์ในฮาร์ดดิสก์, ฟลอปปี้ดิสก์, LAN, คีย์ USB, CD-DVD (พร้อมซอฟต์แวร์เขียนแพ็คเก็ต) และเซิร์ฟเวอร์ FTP มันไม่ได้เป็นอย่างที่คำถามเป็นเรื่องเกี่ยวกับ แต่สิ่งที่ใกล้ที่สุดที่ฉันสามารถหาได้

ฉันก็กำลังมองหาวิธีแก้ปัญหาเวลาอย่างน้อย 1 นาทีใน Robocopy และพบคำถามอายุสองปีนี้ ฉันลงเอยด้วยการแนะนำซอฟต์แวร์นี้ให้ฉันและนั่นคือสิ่งที่ฉันกำลังใช้อยู่ สำหรับบันทึกฉันไม่มีส่วนเกี่ยวข้องกับซอฟต์แวร์

ข้อดี:

  • มีการซิงค์ตามเวลาจริง
  • สามารถเพิ่มหลายคู่โฟลเดอร์และเลือกคู่ที่ใช้งานในเวลาที่กำหนดโดยใช้ช่องทำเครื่องหมายถัดจากพวกเขา
  • ไม่มีโปรแกรมติดตั้งแบบสแตนด์อโลน
  • คุณสามารถยกเว้นหรือรวมไฟล์ผ่านรูปแบบหรือตามเวลาที่แก้ไขได้โดยคลิกปุ่ม 'ตัวกรอง'
  • (อื่น ๆ ดูภาพหน้าจอด้านล่างช่องทำเครื่องหมายและปุ่มมีคำแนะนำเครื่องมือช่วยเหลือเพิ่มเติม)

จุดด้อย:

  • เป็นยูทิลิตี้ GUI ไม่มีสวิตช์บรรทัดคำสั่ง
  • คู่ของโฟลเดอร์ทั้งหมดแชร์การตั้งค่าเดียวกัน

ภาพหน้าจอ

ตัวเลือกการซิงค์แบบเรียลไทม์ถูกทำเครื่องหมายในภาพหน้าจอในส่วน 'ตัวเลือกพิเศษ' นี่จะเป็นสิ่งที่คำถามดูเหมือนจะอธิบายว่าเป็นเป้าหมาย หากไม่ได้ตรวจสอบและคุณไม่มีการตั้งเวลาคุณสามารถคลิกปุ่ม 'ซิงโครไนซ์' เพื่อเริ่มการซิงค์ครั้งเดียว

วิธีซิงค์สองโฟลเดอร์:

  • เลือกโฟลเดอร์ซอร์สที่คุณต้องการมอนิเตอร์โดยใช้กล่องโต้ตอบเรียกดูที่มุมบนซ้าย
  • เลือกโฟลเดอร์ปลายทางที่คุณต้องการคัดลอกการเปลี่ยนแปลงไปที่มุมขวาบน
  • (ไม่บังคับ) หากคุณพิมพ์เส้นทางโฟลเดอร์ด้วยตนเองแทนที่จะใช้กล่องโต้ตอบเรียกดูให้คลิกปุ่ม 'ทดสอบ' ระหว่างกล่องสองช่องที่ด้านบนเพื่อดูว่ามีโฟลเดอร์เหล่านั้นอยู่จริงหรือไม่ คุณจะต้องการตรวจสอบ 'สร้างโฟลเดอร์หากไม่มีอยู่' ในกรณีส่วนใหญ่เพื่อให้แน่ใจว่ามีการคัดลอกโฟลเดอร์ใหม่เนื่องจากจะไม่ถูกตรวจสอบโดยค่าเริ่มต้นดังนั้นโปรแกรมจะคัดลอกไฟล์ตามค่าเริ่มต้นเท่านั้น
  • ทำเครื่องหมายที่ช่อง 'ซิงค์เรียลไทม์' การซิงค์กำลังทำงานอยู่และการเปลี่ยนแปลงทั้งหมดจากโฟลเดอร์ด้านซ้ายจะถูกคัดลอกไปยังโฟลเดอร์ด้านขวา

ฉันพบวิดีโอ YouTubeนี้ซึ่งแสดงซอฟต์แวร์ที่ใช้งานจริง มันแสดงเวอร์ชั่นเก่ากว่าและตัวเลือกไม่ได้อยู่ในที่เดียวกัน แต่ให้ความรู้สึกว่าซอฟต์แวร์ทำงานอย่างไร


คำถามถามว่าจะทำให้บางสิ่งเกิดขึ้นได้อย่างไร (ใน Robocopy) การแนะนำโซลูชันทางเลือกอธิบายวิธีการบรรลุผลลัพธ์เดียวกันโดยใช้เครื่องมืออื่น อย่างไรก็ตามสิ่งนี้ไม่ได้อธิบายถึงวิธีการแก้ปัญหาอย่างแท้จริง
fixer1234

@ fixer1234 ฉันเป็นเพียงแค่เดิมวางแผนที่จะแสดงความคิดเห็นกับคำถาม แต่ดูเหมือนว่าบัญชีของฉันใหม่เกินไปที่จะทำเช่นนั้น (ฉันสามารถแสดงความคิดเห็นในคำตอบของฉันเองได้ชัด) ฉันก็กำลังมองหาวิธีการแก้ปัญหาเวลาน้อยที่สุดใน robocopy 1 นาทีและพบคำถามอายุสองปีนี้ ฉันสิ้นสุดการมีซอฟต์แวร์ข้างต้นแนะนำให้ฉันและนั่นคือสิ่งที่ฉันใช้ คิดว่าคนอื่น ๆ ในสถานการณ์เดียวกันจะพบว่ามีประโยชน์นั่นคือทั้งหมด สำหรับงานที่ดูเหมือนง่าย (การซิงค์โฟลเดอร์) มันน่าประหลาดใจมากที่คุณต้องค้นหาวิธีแก้ปัญหา ..
Ashley Wilson

สำหรับความชัดเจนของคำตอบของฉัน - ฉันหวังว่าฉันสามารถแนบภาพหน้าจอ (อีกครั้งบัญชีใหม่เกินไปที่จะอนุญาต) ซึ่งจะทำให้ชัดเจนยิ่งขึ้น - เป็น GUI หน้าจอเดียวและตัวเลือกทั้งหมดชัดเจนและเรียบง่าย เข้าใจไหม.
แอชลีย์วิลสัน

หากคุณใช้บริการแชร์ไฟล์ใด ๆ เพียงเพิ่มลิงค์ไปยังรูปภาพของคุณและมีคนอื่นฝังไว้สำหรับคุณ หากคุณไม่ได้ใช้เป็นประจำมีฟรีมากมาย (เช่น imgur.com)
fixer1234

นี่คือภาพหน้าจอ: i.imgur.com/F7heg9A.png
Ashley Wilson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.