batch file बैच फ़ाइल फ़ाइल या फ़ोल्डर के लिए पूछता है




batch-file xcopy (9)

XCopy फोर्स फ़ाइल का संदर्भ

फ़ाइलों को मजबूर करने के लिए, हम पाइपलाइन "इको एफ |" का उपयोग कर सकते हैं :

C:\Trash>xcopy 23.txt 24.txt
Does 24.txt specify a file name
or directory name on the target
(F = file, D = directory)?

C:\Trash>echo F | xcopy 23.txt 24.txt
Does 24.txt specify a file name
or directory name on the target
(F = file, D = directory)? F
C:23.txt
1 File(s) copied

किसी फ़ोल्डर को मजबूर करने के लिए, हम xcopy के लिए पैरामीटर का उपयोग कर सकते हैं या गंतव्य फ़ोल्डर के अंत में बैकस्लैश () का उपयोग कर सकते हैं।

मेरे पास हमारे उन लोगों में से एक के लिए स्क्रिप्ट से एक साधारण प्रतिलिपि है, जो मेरी मेज से 20 किमी दूर है

स्क्रिप्ट आउट का परीक्षण करते समय मुझे संकेत दिया जाता है कि अगर मेरी फ़ाइल shapes.atc एक फ़ाइल या फ़ोल्डर है

मैं आपको बता सकता हूं कि यह एक फाइल है लेकिन मैं अपने लड़के पर इसे ऑटोकॉपी कैसे कर सकता हूं बस बैच को समाप्त करने में सक्षम होना चाहिए

xcopy /s/y J:\"My Name"\"FILES IN TRANSIT"\JOHN20101126\"Missing file"\Shapes.atc C:\"Documents and Settings"\"His name"\"Application Data"\Autodesk\"AutoCAD 2010"\"R18.0"\enu\Support\Shapes.atc

असली चाल है: फ़ाइल पथ की प्रतिलिपि बनाने के लिए लक्ष्य पथ के अंत में बैकस्लैश का उपयोग करें। यदि आप कोई चेतावनी नहीं चाहते हैं, तो / वाई मौजूदा फ़ाइलों को ओवरराइट करने के लिए है।

उदाहरण:

xcopy /Y "C:\file\from\here.txt" "C:\file\to\here\"

असल में xcopy आपको नहीं पूछता है कि मूल फ़ाइल मौजूद है, लेकिन यदि आप इसे Shapes.atc नामक एक नए फ़ोल्डर में रखना चाहते हैं, या फ़ोल्डर समर्थन में (जो आप चाहते हैं।

Xcopy को यह पूछने से रोकने के लिए, बस उसे गंतव्य फ़ोल्डर बताएं, इसलिए कोई अस्पष्टता नहीं है:

xcopy /s/y "J:\Old path\Shapes.atc" "C:\Documents and Settings\his name\Support"

यदि आप गंतव्य में फ़ाइल नाम बदलना चाहते हैं तो प्रतिलिपि का उपयोग करें (जो फ़ाइलों की प्रतिलिपि करते समय xcopy से अधिक अनुकूलित है):

copy /y "J:\Old path\Shapes.atc" "C:\Documents and Settings\his name\Support\Shapes-new.atc

वर्चुअल पैरेंट चाल

मान लें कि आपके पास अपना स्रोत और गंतव्य फ़ाइल है

%SRC_FILENAME% and %DST_FILENAME%

आप एक 2 कदम विधि का उपयोग कर सकते हैं:

@REM on my win 7 system mkdir creates all parent directories also
mkdir "%DST_FILENAME%\.."
xcopy "%SRC_FILENAME% "%DST_FILENAME%\.."

यह उदाहरण के लिए हल किया जाएगा

mkdir "c:\destination\b\c\file.txt\.."
@REM The special trick here is that mkdir can create the parent
@REM directory of a "virtual" directory (c:\destination\b\c\file.txt\) that 
@REM doesn't even need to exist.
@REM So the directory "c:\destination\b\c" is created here.
@REM mkdir "c:\destination\b\c\dummystring\.." would have the same effect

xcopy "c:\source\b\c\file.txt" "c:\destination\b\c\file.txt\.."
@REM xcopy computes the real location of  "c:\destination\b\c\file.txt\.."
@REM which is the now existing directory "c:\destination\b\c"
@REM (the parent directory of the "virtual" directory c:\destination\b\c\file.txt\).

मैं इस विचार पर आया जब मैंने कुछ वास्तव में जंगली .. /..- निर्माण प्रक्रिया से उत्पन्न कमांड लाइनों में कॉन्स्ट्रुक्ट किया।


echo f | xcopy /s/y J:\"My Name"\"FILES IN TRANSIT"\JOHN20101126\"Missing file"\Shapes.atc C:\"Documents and Settings"\"His name"\"Application Data"\Autodesk\"AutoCAD 2010"\"R18.0"\enu\Support\Shapes.atc

खैर, द्वारा पूछे गए कार्य के लिए शायद की अधूरी सलाह के अनुसार शायद सबसे अच्छा समाधान निम्न आदेश होगा:

xcopy "J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file\Shapes.atc" "C:\Documents and Settings\His name\Application Data\Autodesk\AutoCAD 2010\R18.0\enu\Support\" /Q /R /S /Y

यह इस सरल फ़ाइल प्रतिलिपि कार्य के लिए काम करता है

  • गंतव्य फ़ाइल के बजाय गंतव्य निर्देशिका निर्दिष्ट करना और
  • एक बैकस्लैश के साथ गंतव्य गंतव्य निर्देशिका समाप्त करना जो कि बहुत महत्वपूर्ण है क्योंकि अन्यथा XCOPY भी एक फ़ाइल को कॉपी करने पर फ़ाइल या निर्देशिका के लिए संकेत देगा।

प्रश्न से संबंधित अन्य पैरामीटर इस प्रकार हैं:

  • /Q ... शांत
  • /Y ... मौजूदा फ़ाइल को ओवरराइट करने पर हाँ (ओएस भाषा स्वतंत्र)
  • /R ... केवल पढ़ने-योग्य, छिपी हुई और सिस्टम फ़ाइल को ओवरराइट करें
  • /S ... निर्दिष्ट निर्देशिका और सभी उपनिर्देशिका से।

खैर, मुझे नहीं पता कि /S वास्तव में यहां जरूरी है क्योंकि यह अस्पष्ट है अगर सिर्फ J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file\Shapes.atc प्रतिलिपि बनाई जानी चाहिए या सभी Shapes.atc निर्देशिका में कहीं भी Shapes.atc J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file पेड़ J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file

पैरामीटर के लिए स्पष्टीकरण कमांड प्रॉम्प्ट विंडो खोलकर और इस विंडो xcopy /? भीतर से xcopy /? पढ़ा जा सकता है xcopy /? XCOPY के लिए सहायता आउटपुट प्राप्त करने के लिए।

लेकिन प्रदान किए गए समाधानों में से कोई भी फ़ाइल प्रतिलिपि कार्य के लिए काम नहीं करता जिस पर एक फ़ाइल को स्रोत फ़ाइल के रूप में एक ही निर्देशिका में कॉपी किया जाना चाहिए, लेकिन फ़ाइल एक्सटेंशन से पहले फ़ाइल नाम में वर्तमान दिनांक और समय के कारण एक अलग फ़ाइल नाम डाला गया है।

स्रोत फ़ाइल में छुपा या सिस्टम विशेषता सेट हो सकता है जिसमें COPY कमांड के उपयोग को शामिल नहीं किया गया है।

समयबद्ध मुद्रित फ़ाइल बनाने के लिए बैच फ़ाइल को Windows XP पर भी काम करना चाहिए जिसमें ROBOCOPY को शामिल किया गया है क्योंकि डिफ़ॉल्ट रूप से Windows XP पर उपलब्ध नहीं है।

बैच फ़ाइल को किसी भी फाइल के साथ काम करना चाहिए जिसमें गैर विशिष्ट फाइलें शामिल हैं जैसे कि .gitconfig या .htaccess जो फाइल एक्सटेंशन के बिना फाइलें हैं जो उन्हें * निक्स सिस्टम पर छिपाने के लिए एक बिंदु से शुरू होती हैं। विंडोज कमांड प्रोसेसर ऐसी फाइलों के रूप में फाइलों के रूप में व्याख्या करता है जिनके पास फ़ाइल नाम नहीं है और नियम के कारण सिर्फ एक फाइल एक्सटेंशन है कि आखिरी बिंदु के बाद सब कुछ फाइल का विस्तार है और अंतिम बिंदु से पहले सबकुछ फ़ाइल नाम है।

एक पूर्ण कार्य विवरण और अंतिम के लिए, पूरी तरह से टिप्पणी किए गए समाधान पोस्ट को अल्ट्राएडिट फ़ोरम में फ़ाइलों की बैकअप प्रति बनाएं

Patrick's , तीर्थ आर , इंटरोकिटर ऑपरेटर और CharlesB's समाधान काम नहीं करते हैं क्योंकि यदि फ़ाइल फ़ाइल पहले से मौजूद नहीं है तो /Y का उपयोग फ़ाइल या निर्देशिका प्रॉम्प्ट से नहीं बचता है।

एंडी मॉरिस ' और grenix's समाधान का उपयोग एकल फ़ाइल प्रतिलिपि कार्य के लिए नहीं किया जा सकता है क्योंकि गंतव्य गंतव्य फ़ाइल का नाम होना चाहिए, न कि गंतव्य निर्देशिका का नाम होना चाहिए। गंतव्य निर्देशिका स्रोत निर्देशिका के समान है, लेकिन गंतव्य फ़ाइल का नाम स्रोत फ़ाइल के नाम से अलग है।

DosMan's और Govert's समाधान बस एक बिंदु से शुरू होने वाली फाइलों के लिए काम नहीं करते हैं और फ़ाइल एक्सटेंशन नहीं रखते हैं।

उदाहरण के लिए आदेश

xcopy C:\Temp\.gitconfig C:\Temp\.gitconfig_2016-03-07_15-30-00* /C /H /K /Q /R /V /Y

निष्पादन पर निम्न त्रुटि संदेश में परिणाम:

अंग्रेजी: दूसरे फ़ाइल नाम का विस्तार नहीं कर सका ताकि पहले मैच किया जा सके।
जर्मन: Zweiter Dateiname konnte nicht so erweitert werden, dass er zum ersten passt।

और अंत में डेनिस इविन के समाधान पर प्रतिबंध है कि फ़ाइल के स्वचालित उत्तर देने के लिए ऑपरेटिंग सिस्टम भाषा निर्भर चरित्र या निर्देशिका संकेत ज्ञात होना चाहिए।

तो मैंने जर्मन विंडोज़ पर डेटी के लिए अंग्रेजी विंडोज़ या D पर फ़ाइल के लिए F प्राप्त करने के तरीकों के बारे में सोचा था ? ... के लिए ... विंडोज स्वचालित रूप से।

और संकेत के स्वचालित उत्तर के लिए भाषा निर्भर चरित्र को निर्धारित करना वास्तव में संभव है।

वास्तव में किसी फ़ाइल को प्रतिलिपि किए बिना त्वरित पाठ से भाषा निर्भर पत्र प्राप्त करने के लिए एक हैक का उपयोग किया जाता है।

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

XCOPY के लिए डिवाइस न्यूलर के हैंडलर को इनपुट हैंडलर के रूप में उपयोग किया जाता है जिसके परिणामस्वरूप एक्ससीओपीवाई द्वारा दो बार आउटपुट आउटपुट के बाद प्रतिलिपि प्रक्रिया को तोड़ दिया जाता है।

इस आउटपुट को फोर लूप में संसाधित किया जाता है जो एक उद्घाटन कोष्ठक से शुरू होने वाली पहली पंक्ति से बाहर निकलता है। यह वह रेखा है जिस पर दूसरा चरित्र यह निर्दिष्ट करने के लिए उपयोग करने के लिए पत्र को परिभाषित करता है कि गंतव्य एक फ़ाइल है।

XCOPY का उपयोग करके बैच फ़ाइल को फ़ाइल या निर्देशिका प्रॉम्प्ट के स्वचालित उत्तर देने के लिए आवश्यक पत्र निर्धारित करने के लिए कोड के साथ एक बैच फ़ाइल है, जो स्रोत फ़ाइल के रूप में एक ही निर्देशिका में एक फ़ाइल की टाइम स्टैम्प की प्रतिलिपि बनाने के लिए स्रोत फ़ाइल के रूप में होती है, भले ही स्रोत फ़ाइल छिपी हुई हो या सिस्टम फ़ाइल और यहां तक ​​कि यदि स्रोत फ़ाइल किसी बिंदु से शुरू होती है और इसमें फ़ाइल एक्सटेंशन नहीं है।

@echo off
rem Batch file must be started or called with name of a single file.

if "%~1" == "" exit /B
for /F "delims=*?" %%I in ("#%~1#") do if not "%%I" == "#%~1#" exit /B
if not exist "%~1" exit /B
if exist "%~1\" exit /B
setlocal EnableDelayedExpansion

rem Determine the character needed for answering prompt of
rem XCOPY for destination being a file and not a directory.

del /F "%TEMP%\%~n0.tmp" 2>nul
for /F %%I in ('%SystemRoot%\System32\xcopy.exe "%~f0" "%TEMP%\%~n0.tmp" ^<nul') do (
    set "PromptAnswer=%%I"
    if "!PromptAnswer:~0,1!" == "(" (
        set "PromptAnswer=!PromptAnswer:~1,1!"
        goto CopyFile
    )
)
echo ERROR: Failed to determine letter for answering prompt of XCOPY.
exit /B

:CopyFile
rem This is a workaround for files starting with a point and having no
rem file extension like many hidden files on *nix copied to Windows.

if "%~n1" == "" (
    set "FileNameWithPath=%~dpx1"
    set "FileExtension="
) else (
    set "FileNameWithPath=%~dpn1"
    set "FileExtension=%~x1"
)

rem Get local date and time in region and language independent format YYYYMMDDHHmmss
rem and reformat the local date and time to format YYYY-MM-DD_HH-mm-ss.

for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS get LocalDateTime /format:value') do set "LocalDateTime=%%I"
set "LocalDateTime=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%_%LocalDateTime:~8,2%-%LocalDateTime:~10,2%-%LocalDateTime:~12,2%"

rem Do the copy with showing what is copied and with printing success or
rem an error message if copying fails for example on sharing violation.

echo Copy "%~f1" to "%FileNameWithPath%_%LocalDateTime%%FileExtension%"

for /F %%I in ('echo %PromptAnswer% ^| %SystemRoot%\System32\xcopy.exe "%~f1" "%FileNameWithPath%_%LocalDateTime%%FileExtension%" /C /H /K /Q /R /V /Y') do set "FilesCopied=%%I"

if "%FilesCopied%" == "1" (
    echo Success
) else (
    echo ERROR: Copying failed, see error message above.
)

इस बैच कोड का परीक्षण जर्मन विंडोज एक्सपी एसपी 3 एक्स 86 और अंग्रेजी विंडोज 7 एसपी 1 एक्स 64 पर किया गया था।

पोस्ट देखें बैच कोड के सभी हिस्सों को समझाते हुए, समान, पूरी तरह से टिप्पणी की गई बैच फ़ाइल के लिए UltraEdit फ़ोरम में फ़ाइलों की बैकअप प्रति बनाएं

प्रयुक्त आदेशों को समझने के लिए और वे कैसे काम करते हैं, कमांड प्रॉम्प्ट विंडो खोलें, निम्न आदेशों को निष्पादित करें, और प्रत्येक आदेश के लिए प्रदर्शित सभी सहायता पृष्ठों को बहुत सावधानीपूर्वक पढ़ें।

  • del /?
  • echo /?
  • exit /?
  • for /?
  • goto /?
  • if /?
  • rem /?
  • set /?
  • setlocal /?
  • wmic OS get /?
  • xcopy /?

इसके अलावा कमांड रीडायरेक्शन ऑपरेटरों का उपयोग करने के बारे में माइक्रोसॉफ्ट आलेख भी पढ़ा जाना चाहिए।


/ मैं स्विच आपके बाद क्या हो सकता है।

Xcopy / से?

/ यदि गंतव्य मौजूद नहीं है और एक से अधिक फाइलों की प्रतिलिपि बना रहा है, तो मान लें कि गंतव्य एक निर्देशिका होना चाहिए।


एक प्रतीत होता है कि अनियंत्रित चाल गंतव्य के अंत में * रखना है - तो xcopy एक फ़ाइल के रूप में प्रतिलिपि xcopy , जैसे

xcopy c:\source\file.txt c:\destination\newfile.txt*

echo f | xcopy ... echo f | xcopy ... चाल विंडोज के स्थानीय संस्करणों पर काम नहीं करती है, जहां प्रॉम्प्ट अलग है।


xcopy /s/y J:\"My Name"\"FILES IN TRANSIT"\JOHN20101126\"Missing file"\Shapes.atc C:\"Documents and Settings"\"His name"\"Application Data"\Autodesk\"AutoCAD 2010"\"R18.0"\enu\Support\*.*"

.. यह कर सकता है।

ऐसा करने का अच्छा विचार:

IF NOT EXIST "C:\Documents and Settings\His name\Application Data\Autodesk\AutoCAD 2010\R18.0\enu\Support\Shapes.atc" ECHO/ && ECHO/ && ECHO * * * * * COPY FAILED - Call JustME at 555-555-1212 && ECHO/ && pause

(मान लीजिए कि आपने पिछले संस्करण का नाम बदल दिया है .old)

XCOPY  /Z  <----- restartable mode - good for large files.




xcopy