रोबोकॉपी: एक स्थान से कई स्थानों पर संपत्ति की प्रतिलिपि कैसे करें और एक लॉग बनाए रखें


0

मेरे पास संपत्ति वाले कई फ़ोल्डर हैं (प्रत्येक फ़ोल्डर में इन संपत्ति वाले सबफ़ोल्डर हैं। एमपी 3, .txt, .png, आदि)। मैं सबफ़ोल्डर के साथ एक ही स्थान / फ़ोल्डर में इन सभी संपत्तियों को कॉपी करना चाहता हूं। मैं एक फ़ोल्डर से दूसरे फ़ोल्डर में सबफ़ोल्डर्स के साथ संपत्ति की प्रतिलिपि प्राप्त करने के लिए सफलतापूर्वक एक रोबोकॉपी कमांड चलाने में सक्षम था:

robocopy source target /s

मैं परिसंपत्तियों की नकल करने के लिए प्रतिदिन एक बार एक अनुसूचक चलाऊंगा। इसके अलावा, मैं एक लॉग फ़ाइल में सभी प्रतिलिपि की गई संपत्ति का नाम संग्रहीत करना चाहता था। लॉग फ़ाइल का नाम के रूप में होना चाहिए

log_currentDate.txt

उदाहरण के लिए अगर आज की तारीख 20 अक्टूबर 2015 है ... लॉग फाइल का नाम इस प्रकार होना चाहिए:

log_20151020.txt

अगले दिन यानी 21 अक्टूबर 2015, यह होना चाहिए:

log_20151021.txt

इस लॉग फ़ाइल में 20 अक्टूबर 2015, 21 अक्टूबर 2015 और इसी तरह सभी कॉपी की गई संपत्तियों का नाम होना चाहिए। मैंने एक लॉग बनाने के लिए एक बैच कमांड (@DavidPostill के लिए धन्यवाद) बनाया:

@echo off
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
set _date=%%a%%b%%c
)
echo robocopy source target /log:D:\ABC\log%_date%.txt

यह "logTue2010.txt" (यानी logdayddmm प्रारूप) नाम के साथ एक लॉग बनाता है। मुसीबत:

  1. यह लॉग फ़ाइल कहाँ संग्रहीत होती है? इस लॉग फ़ाइल को दिखाई देने के लिए, मुझे हर रोज एक अलग कमांड लिखनी होगी:

robocopy source target /log:D:\ABC\logWed1021.txt / tee / s

  1. मैं यह कैसे सुनिश्चित कर सकता हूं कि प्रत्येक दिन लॉग की एक अलग प्रति प्राप्त की जाए?
  2. वर्तमान कमांड के साथ, लॉग फ़ाइल में cmd ​​विंडो पर प्रदर्शित संपूर्ण आउटपुट है। मैं बस यह चाहता हूं कि इसके विस्तार के साथ परिसंपत्ति का नाम शामिल हो।

EDIT 1: निम्न बैच कमांड के साथ, मैं फ़ाइल नाम प्रारूप से संबंधित समस्या को हल करने में सक्षम था:

@ECHO OFF
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
ECHO %ts:~0,8%_%ts:~8,4%
echo robocopy ship shore /log:D:\HAL\log\log_%ts:~0,8%_%ts:~8,4%.txt
robocopy Ship Shore /log:D:\HAL\log\log_%ts:~0,8%_%ts:~8,4%.txt /S

इस बैच कमांड ने भी काम किया:

@echo off
for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do set "_date=%%G"
set "_date=%_date:~0,8%"
echo robocopy ship shore /log:D:\HAL\log\log_%_date%.txt
robocopy ship shore /log:D:\HAL\log\log_%_date%.txt /S

हालाँकि यहाँ पूछे गए अन्य प्रश्न अभी भी अनुत्तरित हैं।


कृपया StackExchange से न पूछें । पहले से ही serverfault.com/q/730450/257436
जोसेफZ

मुझे यकीन नहीं था कि यह पूछने के लिए कि दोनों जगह पर यह क्यों जरूरी है। मैं यह सुनिश्चित करूंगा कि मैं इसे दोहराऊं नहीं। धन्यवाद
यश Saraiya

जवाबों:


1

कृपया उसी प्रश्न को StackExchange से न पूछें । Https://serverfault.com/q/730450/257436 पर पहले से ही निम्नानुसार उत्तर दिया गया है:


( Windows प्रबंधन इंस्ट्रूमेंटेशन कमांड ) और पर्यावरण चर विकल्प के विरुद्ध लूपYYYYMMDD का उपयोग करके स्थानीय और क्षेत्रीय सेटिंग्स से स्वतंत्र रूप से तारीख प्राप्त करें :for /Fwmic

@echo off
for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do set "_date=%%G"
set "_date=%_date:~0,8%"

अधिक robocopy प्रवेश विकल्प हैं :

            /L : List only - don’t copy, timestamp or delete any files.
           /NP : No Progress - don’t display % copied.
      /unicode : Display the status output as Unicode text.   #
     /LOG:file : Output status to LOG file (overwrite existing log).
  /UNILOG:file : Output status to Unicode Log file (overwrite)
    /LOG+:file : Output status to LOG file (append to existing log).
 /UNILOG+:file : Output status to Unicode Log file (append)
           /TS : Include Source file Time Stamps in the output.
           /FP : Include Full Pathname of files in the output.
           /NS : No Size - don’t log file sizes.
           /NC : No Class - don’t log file classes.
          /NFL : No File List - don’t log file names.
          /NDL : No Directory List - don’t log directory names.
          /TEE : Output to console window, as well as the log file.
          /NJH : No Job Header.
          /NJS : No Job Summary.

1

यह लॉग फ़ाइल कहाँ संग्रहीत होती है? इस लॉग फ़ाइल को दिखाई देने के लिए मुझे रोज एक अलग कमांड लिखना होगा

ऐसा इसलिए है क्योंकि आपने पिछले को नहीं हटाया echoया /sबैच फ़ाइल में जोड़ें ।

मैंने कल इसे समझाया, हमारी लंबी चैट के दौरान ।

मैंने आपको क्या करने की जरूरत है, यह बताने के लिए अपने उत्तर को भी अपडेट किया :

  • यदि आप दिनांक प्रारूप से खुश हैं तो अंतिम प्रतिध्वनि निकालें
  • यदि आपके स्रोत निर्देशिका में उपनिर्देशिकाएँ हैं जिनकी प्रतिलिपि बनाने की आवश्यकता है, तो प्रयोग करें।

यहाँ उन परिवर्तनों के साथ बैच फ़ाइल है:

@echo off
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
set _date=%%a%%b%%c
)
robocopy ship shore /log:%_date%.txt /s

मैंने चैट में भी कहा:

आपको अपने स्थान के लिए सही तिथि प्रारूप प्राप्त करने के लिए बैच फ़ाइल को बदलने की भी आवश्यकता है।

आपके पीसी पर कमांड प्रॉम्प्ट से दिनांक / टी का आउटपुट क्या है?

मैंने यह इसलिए पूछा क्योंकि मैं देख सकता था कि बैच फ़ाइल में आपके पीसी पर गलत तिथि प्रारूप था (लेकिन खदान पर सही था)। मैं कभी भी इस सवाल का जवाब नहीं देता (इसलिए तिथि प्रारूप अप्रचलित रहा)।

जैसा कि जोसेफज अपने उत्तर में सही तरीके से बताते हैं कि आप जिस तारीख का प्रारूप चाहते हैं उसे पाने के लिए एक बेहतर तरीका है ( log_ddmmyy.txt) चाहे आपके लोकेल का उपयोग करना हो wmic

उन परिवर्तनों के साथ ही अंतिम बैच फ़ाइल बन जाती है:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do (
  set _date=%%G
  set _date=!_date:~0,8!
  )
robocopy ship shore /log:D:\HAL\log_!_date!.txt /s
endlocal

अब आपके लिए अंतिम चरण लॉग फ़ाइल प्रारूप को संशोधित करना है, क्योंकि आप इसके विस्तार के साथ परिसंपत्ति का नाम रखना चाहते हैं:

  • ऐसा करने के लिए जोसेफ के उत्तर में वर्णित स्विच का उपयोग करें।

  • इच्छित स्वरूप प्राप्त करने के लिए स्विच के साथ प्रयोग करें। संकेत: मुझे लगता है कि आपको उन स्विचों में से कई का उपयोग करने की आवश्यकता है।


समय प्रारूप मुद्दा हल हो गया है ... मैं चाहता हूं कि अन्य मुद्दों को हल किया जाए जैसे कि मेरी वर्तमान लॉग फ़ाइल में संपूर्ण सारांश शामिल है जिसे / टी का उपयोग करके cmd में फेंक दिया गया है ... मैं केवल प्रतिलिपि बनाई गई / स्थानांतरित की गई संपत्ति का नाम लॉग इन करना चाहता हूं ... फिर एक ही फोल्डर में अलग-अलग लोकेशन में कई फोल्डर से एसेट्स कैसे
लाएं

आपको अपने लिए यह सीखना शुरू करना होगा। मेरे उत्तर का अंतिम भाग आपको बताता है कि लॉग प्रारूप को बदलने के लिए क्या करना चाहिए। कृपया प्रयोग करें और इसे तब तक बदलें जब तक कि आपको वह प्रारूप न मिले जो आप चाहते हैं।
DavidPostill

मुझे पहले से ही वह प्रारूप मिल गया है जो मुझे चाहिए ... मेरे प्रश्न का संपादन संपादित करें
यश सरैया

आपको /teeबैच फ़ाइल में ** की आवश्यकता नहीं है । हम डाल कल में तो मैं यह पता लगाने सकता है कि क्या आप क्या कर रहे हैं के साथ गलत था (जो कोई लॉगफ़ाइल हो रही थी, क्योंकि आप अपने सवाल में आप उपनिर्देशिकाएं था और जरूरत नहीं कहा /s
DavidPostill

आह। मैं तारीख प्रारूप के बारे में बात नहीं कर रहा हूं । जब मैं लॉग प्रारूप कहता हूं तो मेरा मतलब है कि लॉगफ़ाइल की सामग्री। अन्य उत्तर में स्विच देखें। उदाहरण के लिए /NJH/ NJS। आपको शायद robocopyनौकरी हेडर और सारांश को निकालने के लिए उन कमांड को जोड़ना होगा ।
DavidPostill

0

तो RoboCopy के लिए केवल फ़ाइल फ़ाइल नामों को शामिल करने के लिए / NDL / NC / NS / NJH / NJS जोड़ना है।

मैंने इसका भरपूर इस्तेमाल किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.