विशिष्ट फ़ाइल प्रकारों को एक स्थान से दूसरे स्थान पर कॉपी करें


1

हाय दोस्तों वर्तमान में एक स्कूल में काम कर रहे हैं और Ive sepcific फ़ाइल प्रकारों के लिए सभी छात्र फ़ोल्डर्स को स्कैन करने के लिए एक स्क्रिप्ट बनाई गई है, मैं सोच रहा था कि क्या कोई तरीका था कि मैं इसे हटाने से पहले विशिष्ट फ़ाइल प्रकार की प्रतिलिपि बना सकता था? मैं इसे xcopy और robocopy दोनों सिंटैक्स में स्रोत पते की आवश्यकता के रूप में करने का एक तरीका सोच सकता था। यहां मेरी स्क्रिप्ट है

@echo off
net use X: \\LOCATION FOR STUDENT FOLDERS
net use Y: \\LOCATION FOR COPIED FILES
net use Z: \\LOCATION FOR .TXT FILE OF DELETED FILES
X:
cls
Echo Deleting bat files please wait...
del /s *.bat > Z:\DeletedFiles.txt 2>&1
Echo Deleting CMD files please wait...
del /s *.cmd >> Z:\DeletedFiles.txt 2>&1
Echo Deleting VBS files please wait...
del /s *.vbs >> Z:\DeletedFiles.txt 2>&1
Echo Deleting Executable files please wait...
del /s *.exe >> Z:\DeletedFiles.txt 2>&1
mountvol X:\ /D
mountvol Y:\ /D
mountvol Z:\ /D
cls
Echo Process Completed. Drives Unmounted
set /p=Press Any Key To Close

मुझे लगता है कि यह आसान नहीं है (अकेले भी संभव है) नीचे की तरह कुछ में प्रवेश करने के रूप में?

xcopy *.bat Y:\

जिस तरह से शक्तियां स्क्रिप्ट मेरे निपटान में निकलती हैं, क्योंकि मेरे पास उन्हें (मूर्खतापूर्ण शिक्षा विभाग) चलाने का अधिकार नहीं है, लेकिन अगर कोई शक्तियां वैकल्पिक हैं तो कृपया पोस्ट करें क्योंकि यह भी मेरे लिए अच्छा होगा।


मुझे लगता है कि यह "xcopy * .bat Y: \" के रूप में आसान है
डेविड दाई

@DavidDai मामला नहीं है, मैंने इसे अपने परीक्षण वातावरण में परीक्षण किया है और यह केवल माउंट किए गए छात्र फ़ोल्डर ड्राइव की जड़ में जो भी होगा, वह कॉपी करेगा, यह प्रत्येक छात्रों के फ़ोल्डर के माध्यम से पुनरावृत्ति नहीं करेगा और प्रत्येक निर्दिष्ट फ़ाइल की प्रतिलिपि बनाता है। इसे हटाने का कार्य पूरी तरह से काम करता है
सुपर ज्यॉफ

जवाबों:


4

का उपयोग करते हुए FORFILES

इस तरह से पचाना और भी आसान हो सकता है:

forfiles /P C:\Windows /S /M *.dll /C "cmd /c @echo @path"

यह एक उदाहरण है जिसे आप कमांड लाइन से बिना किसी को नुकसान पहुंचाए चला सकते हैं।

यहां बताया गया है कि आप इसे अपनी स्क्रिप्ट में कैसे उपयोग कर सकते हैं:

forfiles /P X:\ /S /M *.bat /C "cmd /c @copy @path Y:\"

का उपयोग करते हुए FOR

FOR /R X:\ %%B IN (*.bat) DO (
    copy "%%~fB" Y:\
    REM you could do the delete in here too, 
    REM but it's probably faster the way you have it
)

यह कैसे काम करता है:

FORसाथ आदेश /Rस्विच प्रदान की गई निर्देशिका (इस मामले में के माध्यम से रिकर्सिवली लग रहा है X:\पैटर्न में परिभाषित के लिए INअनुभाग। यहाँ हम यह पैटर्न दे रहे हैं *.bat। पाया प्रत्येक फ़ाइल के लिए, यह बयान के बाद चलता है DO। कि हो जाएगा पाया जाता है फ़ाइल %%Bचर में डाल (आप किसी भी पत्र का चयन कर सकते हैं)।

लूप के प्रत्येक पुनरावृत्ति पर हम कई कमांड चलाने की अनुमति देने के (...)बाद उपयोग करते हैं DO

%%~fBके मान के उपचार का एक विशेष तरीका है %%B~इस तरह के सभी विशेष formatters शुरू होता है और अपने आप में उद्धरण चिह्नों को हटा यदि वे मौजूद। fएक पूर्ण पथ नाम के रूप में मान को प्रारूपित करता है, यदि यह रिश्तेदार के रूप में उपयोग किया जा रहा है।

for /?कमांड लाइन पर दौड़ने से FORक्षमताओं और प्रारूपित झंडों का बहुत विस्तृत विवरण मिलता है।

ध्यान दें

हम %%Bइसके बजाय उपयोग कर रहे %Bहैं क्योंकि मदद आपको दिखाएगी क्योंकि यह एक बैच फ़ाइल के अंदर है। यहाँ कुछ नमूने दिए गए हैं FORजिन्हें आप सीधे कमांड लाइन पर चला सकते हैं:

FOR /R C:\Windows %Q IN (*.ttf) DO @echo I am a font: "%Q"
FOR /R C:\Windows %Q IN (*.dll) DO @echo Full path to DLL: %~fQ

यदि वे एक बैच फ़ाइल में थे, तो आपको दोहरे प्रतिशत संकेतों का उपयोग करना होगा।

PowerShell के बारे में

मैं यह भी बताना चाहता था कि आपको पॉवरशेल स्क्रिप्ट चलाने के लिए किसी विशेष अनुमति की आवश्यकता नहीं है।

यदि आपको निष्पादन नीति के बारे में कोई त्रुटि मिल रही है, तो यह सिर्फ एक सुरक्षा उपाय है, और शक्तियों के भीतर (स्क्रिप्ट में नहीं) आप चला सकते हैं:

Set-ExecutionPolicy Bypass

संभावित सेटिंग्स की पूरी समझ प्राप्त करने के लिए आपको निष्पादन नीति के बारे में अधिक पढ़ना चाहिए ।

यदि आप एक शेड्यूल किए गए कार्य के माध्यम से एक पॉवरशेल स्क्रिप्ट चला रहे हैं, तो जब आप इसे लागू करते हैं, तो आप निष्पादन नीति को बदल सकते हैं:

powershell.exe -ExecutionPolicy Bypass

एक निर्धारित कार्य से पूर्ण आह्वान इस तरह दिख सकता है:

powershell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -File C:\Scripts\script.ps1

खेद और एक अशिक्षित आईटी आदमी की परिभाषा की तरह लगता है, लेकिन मैंने पहले कभी भी लूप के लिए उपयोग नहीं किया है, हालांकि मैं आमतौर पर बहुत जल्दी सीखता हूं। क्या आप मुझे दिखा सकते हैं कि मैं अपनी लिपि में लूप के लिए कैसे शामिल करूंगा?
सुपर ज्यॉफ

जैसा कि लिखा गया है, मुझे लगता है कि यह वही होगा जो आप चाहते थे। मैं यह कैसे काम कर रहा हूँ की व्याख्या के साथ संपादित करूँगा।
रिश्वतखोर

मैंने भी अभी एक खंड जोड़ा है FORFILES(मैं हमेशा उस कमांड के बारे में भूल जाता हूं जब तक कि मैं एक FORलूप में गहरी नहीं हूं )। यह उपयोग करने के लिए आसान हो सकता है।
रिश्वतखोर

1

FORछोरों का उपयोग करें :

SETLOCAL EnableExtensions
For /R "X:\" %%I IN (*.bat) do (
    xcopy /i "%%I" "Y:\%%~nxI"
    del "%%I"
)

तो आपकी स्क्रिप्ट हो सकती है:

@echo off
SETLOCAL EnableExtensions
net use X: \\LOCATION FOR STUDENT FOLDERS
net use Y: \\LOCATION FOR COPIED FILES
net use Z: \\LOCATION FOR .TXT FILE OF DELETED FILES
X:
cls
Echo Deleting bat, cmd, vbs, and exe files please wait...
For /R "X:\" %%I IN (*.*) do (
    set "isTrue="
    if (%%~xI == ".bat") set isTrue=1
    if (%%~xI == ".cmd") set isTrue=1
    if (%%~xI == ".vbs") set isTrue=1
    if (%%~xI == ".exe") set isTrue=1
    if defined isTrue (
        xcopy "%%I" "Y:\%%~nxI"
        del /s "%%I" > "Z:\DeletedFiles.txt" 2>&1
    )
)
mountvol X:\ /D
mountvol Y:\ /D
mountvol Z:\ /D
cls
Echo Process Completed. Drives Unmounted
set /p=Press Any Key To Close
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.