यदि कोई फ़ाइल बैच फ़ाइल में मौजूद है, तो कैसे सत्यापित करें?


186

मुझे एक .BATफाइल बनानी है जो ऐसा करती है:

  1. अगर C:\myprogram\sync\data.handlerमौजूद है, तो बाहर निकलें;
  2. अगर C:\myprogram\html\data.sqlमौजूद नहीं है, तो बाहर निकलें;
  3. में C:\myprogram\sync\छोड़कर सभी फ़ाइलों और फ़ोल्डरों को हटाना ( test, test3और test2)
  4. को कॉपी C:\myprogram\html\data.sqlकरेंC:\myprogram\sync\
  5. विकल्प के साथ अन्य बैच फ़ाइल को कॉल करें sync.bat myprogram.ini

यदि यह बैश वातावरण में था, तो यह मेरे लिए आसान था, लेकिन मुझे नहीं पता कि कोई फ़ाइल या फ़ोल्डर मौजूद है या नहीं और यह फ़ाइल या फ़ोल्डर है या नहीं।

जवाबों:


289

आप फ़ाइल के लिए जाँच करने के लिए IF EXIST का उपयोग कर सकते हैं:

IF EXIST "filename" (
  REM Do one thing
) ELSE (
  REM Do another thing
)

यदि आपको "और" की आवश्यकता नहीं है, तो आप ऐसा कुछ कर सकते हैं:

set __myVariable=
IF EXIST "C:\folder with space\myfile.txt" set __myVariable=C:\folder with space\myfile.txt
IF EXIST "C:\some other folder with space\myfile.txt" set __myVariable=C:\some other folder with space\myfile.txt
set __myVariable=

फ़ाइल या फ़ोल्डर की खोज का एक कार्यशील उदाहरण यहां दिया गया है:

REM setup

echo "some text" > filename
mkdir "foldername"

REM finds file    

IF EXIST "filename" (
  ECHO file filename exists
) ELSE (
  ECHO file filename does not exist
)

REM does not find file

IF EXIST "filename2.txt" (
  ECHO file filename2.txt exists
) ELSE (
  ECHO file filename2.txt does not exist
)

REM folders must have a trailing backslash    

REM finds folder

IF EXIST "foldername\" (
  ECHO folder foldername exists
) ELSE (
  ECHO folder foldername does not exist
)

REM does not find folder

IF EXIST "filename\" (
  ECHO folder filename exists
) ELSE (
  ECHO folder filename does not exist
)

1
फ़ाइल नाम के साथ कोई पूर्ण पथ कैसे देखता है? बोनस अंक अगर पथ रिक्त स्थान शामिल हैं। जैसे ओपी ने कहा, BASH में सरल।
निक

2
@ निक: सरल में cmdभी - कृपया एक अलग सवाल के रूप में पूछें - वे ज्यादा खर्च नहीं करते हैं। 3 वर्ष से अधिक पुरानी एक और टिप्पणी पर टिप्पणी करने से कई प्रतिक्रियाओं के आने की संभावना नहीं है (लेकिन इस सटीक प्रश्न के उत्तर के लिए पहले SO की जांच करें, अन्यथा आप अपने नए प्रश्न को डुप्लिकेट के रूप में चिह्नित करेंगे ...)
मागू

8
IF /?मदद फ़ाइल से बस कुछ ध्यान दें : The ELSE clause must occur on the same line as the command after the IF.यह मुझे जला दिया। आशा है कि यह आपकी मदद करता है।
फंकीमुशरूम

1
रिमाइंडर: IF, EXIST, ELSE, REM, DEL, आदि सभी लोअरकेस में काम करते हैं!
टेरा एशले

1
जाँच करें कि क्या फ़ाइल मौजूद नहीं है, का उपयोग करें If Not Exist "%FilePath% ( command )। ध्यान दें कि, बल्ले का उपयोग करता है ब्रेसिज़ (घुंघराले ब्रेसिज़ के बजाय{
transang

11

टाइप करें IF /? यदि इसके बारे में मदद पाने के लिए, यह स्पष्ट रूप से बताता है कि कैसे IF EXIST का उपयोग करना है।

कुछ फ़ोल्डरों को छोड़कर एक पूर्ण ट्री को हटाने के लिए, इस प्रश्न का उत्तर देखें: किसी एक फ़ोल्डर में सब कुछ हटाने के लिए विंडोज बैच स्क्रिप्ट

अंत में कॉपी करने का मतलब सिर्फ COPY को कॉल करना और दूसरी बैट फाइल को कॉल करना इस तरह हो सकता है:

MYOTHERBATFILE.BAT sync.bat myprogram.ini

10

यदि कोई फ़ाइल मौजूद है या नहीं तो कमांड कैसे करें, इस पर एक अच्छा उदाहरण है:

if exist C:\myprogram\sync\data.handler echo Now Exiting && Exit
if not exist C:\myprogram\html\data.sql Exit

हम उन तीन फाइलों को ले लेंगे और इसे एक अस्थायी स्थान पर रख देंगे। फ़ोल्डर को हटाने के बाद, यह उन तीन फ़ाइलों को पुनर्स्थापित करेगा।

xcopy "test" "C:\temp"
xcopy "test2" "C:\temp"
del C:\myprogram\sync\
xcopy "C:\temp" "test"
xcopy "C:\temp" "test2"
del "c:\temp"

XCOPY कमांड का उपयोग करें :

xcopy "C:\myprogram\html\data.sql"  /c /d /h /e /i /y  "C:\myprogram\sync\"

मैं /c /d /h /e /i /yइसका मतलब बताऊंगा:

  /C           Continues copying even if errors occur.
  /D:m-d-y     Copies files changed on or after the specified date.
               If no date is given, copies only those files whose
               source time is newer than the destination time.
  /H           Copies hidden and system files also.
  /E           Copies directories and subdirectories, including empty ones.
               Same as /S /E. May be used to modify /T.
  /T           Creates directory structure, but does not copy files. Does not
               include empty directories or subdirectories. /T /E includes
  /I           If destination does not exist and copying more than one file,
               assumes that destination must be a directory.
  /Y           Suppresses prompting to confirm you want to overwrite an
               existing destination file.

`To see all the commands type`xcopy /? in cmd

विकल्प सिंक के साथ अन्य बैच फ़ाइल को कॉल करें। myprogram.ini।

मुझे यकीन नहीं है कि आप इससे क्या मतलब रखते हैं, लेकिन अगर आप इन दोनों फाइलों को खोलना चाहते हैं, तो आप सिर्फ फाइल का रास्ता डालेंगे

Path/sync.bat
Path/myprogram.ini

यदि यह बैश वातावरण में था, तो यह मेरे लिए आसान था, लेकिन मुझे नहीं पता कि कोई फ़ाइल या फ़ोल्डर मौजूद है या नहीं और यह फ़ाइल या फ़ोल्डर है या नहीं।

आप एक बैच फ़ाइल का उपयोग कर रहे हैं। आपने पहले उल्लेख किया था कि आपको इसका उपयोग करने के लिए एक .bat फ़ाइल बनानी होगी:

मुझे एक .BAT फ़ाइल बनानी होगी जो ऐसा करती है:


इस जवाब के साथ Whats Rung?
अविराम शर्मन २१'१४ १२:०४
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.