Bir toplu iş dosyasında dosyanın olup olmadığını nasıl doğrularım?


186

Bunu yapan bir .BATdosya oluşturmak zorunda:

  1. Varsa C:\myprogram\sync\data.handler, çıkın;
  2. Eğer C:\myprogram\html\data.sqlyoksa, çıkın;
  3. In C:\myprogram\sync\( test, test3ve test2) dışındaki tüm dosya ve klasörleri sil
  4. Şuraya kopyala C:\myprogram\html\data.sql:C:\myprogram\sync\
  5. Seçenek ile diğer toplu iş dosyasını arayın sync.bat myprogram.ini.

Bash ortamında olsaydı benim için kolaydı, ancak bir dosya veya klasörün var olup olmadığını ve bir dosya veya klasör olup olmadığını nasıl test edeceğimi bilmiyorum.

Yanıtlar:


289

Bir dosyayı kontrol etmek için IF EXIST'i kullanabilirsiniz:

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

Başka bir şeye ihtiyacınız yoksa, şöyle bir şey yapabilirsiniz:

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=

Bir dosya veya klasör aramanın çalışan bir örneği:

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
Dosya adı ile tam yol nasıl kontrol edilir? Yolda boşluk varsa bonus puan. OP'nin dediği gibi, BASH'de basit.
Nick

2
@Nick: Çok basit cmd- lütfen farklı bir soru olarak sorun - çok pahalı değil. 3 yaşından büyük bir soruya başka bir soru yorumu eklemenin pek çok yanıt alması olası değildir (ancak bu kesin sorunun yanıtları için önce SO'ya bakın, aksi takdirde yeni sorunuzun kopya olarak işaretlendiğini göreceksiniz ...)
Magoo

8
IF /?Yardım dosyasından not edilmesi gereken bir şey : The ELSE clause must occur on the same line as the command after the IF.Bu beni yaktı. umarım sana yardımcı olur.
funkymushroom

1
Hatırlatma: EĞER, VAR, ELSE, REM, DEL, vb. Hepsi de küçük harfle çalışır!
Terra Ashley

1
dosyanın bulunup bulunmadığını kontrol etmek için kullanın If Not Exist "%FilePath% ( command ). Unutmayın yarasa kullandığı parantez (yerine küme parantezleri arasında{
transang


10

Bir dosya varsa veya yoksa bir komutun nasıl yapılacağına ilişkin iyi bir örnek:

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

Bu üç dosyayı alıp geçici bir yere koyacağız. Klasörü sildikten sonra, bu üç dosyayı geri yükler.

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

XCOPY komutunu kullanın :

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

Bunun ne /c /d /h /e /i /yanlama geldiğini açıklayacağım :

  /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

Sync.bat myprogram.ini seçeneği ile diğer toplu iş dosyalarını çağırın.

Bununla ne demek istediğinden emin değilim, ama sadece bu dosyaların her ikisini de açmak istiyorsan, dosyanın yolunu

Path/sync.bat
Path/myprogram.ini

Bash ortamında olsaydı benim için kolaydı, ancak bir dosya veya klasörün var olup olmadığını ve bir dosya veya klasör olup olmadığını nasıl test edeceğimi bilmiyorum.

Bir toplu iş dosyası kullanıyorsunuz. Daha önce, bunu kullanmak için bir .bat dosyası oluşturmanız gerektiğini söylemiştiniz:

Bunu yapan bir .BAT dosyası oluşturmak zorunda:


Bu cevapta ne var?
Avrumi Sherman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.