Bagaimana cara memverifikasi jika ada file dalam file batch?


186

Saya harus membuat .BAT file yang melakukan ini:

  1. Jika C:\myprogram\sync\data.handler ada, keluar;
  2. Jika C:\myprogram\html\data.sql tidak ada, keluar;
  3. Dalam C:\myprogram\sync\menghapus semua file dan folder kecuali ( test,test3 dan test2)
  4. Menyalin C:\myprogram\html\data.sql keC:\myprogram\sync\
  5. Panggil file batch lain dengan opsi sync.bat myprogram.ini .

Jika berada di lingkungan Bash itu mudah bagi saya, tapi saya tidak tahu cara menguji apakah ada file atau folder dan apakah itu file atau folder.

Jawaban:


289

Anda dapat menggunakan JIKA ADA untuk memeriksa file:

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

Jika Anda tidak membutuhkan "lain", Anda dapat melakukan sesuatu seperti ini:

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=

Berikut adalah contoh kerja mencari file atau folder:

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
Bagaimana cara memeriksa path lengkap dengan nama file? Poin bonus jika jalur berisi spasi. Seperti kata OP, simpel dalam BASH.
Nick

2
@Nick: Sederhana cmdjuga - silakan ajukan pertanyaan yang berbeda - mereka tidak membutuhkan biaya banyak. Menambahkan komentar pertanyaan lebih lanjut ke salah satu yang lebih dari 3 tahun kemungkinan tidak akan mendapatkan banyak tanggapan (tetapi periksa SO terlebih dahulu untuk jawaban atas pertanyaan yang tepat ini, jika tidak, Anda akan mendapatkan pertanyaan baru yang ditandai sebagai duplikat ...)
Magoo

8
Hanya sesuatu yang perlu diperhatikan dari IF /?file bantuan: The ELSE clause must occur on the same line as the command after the IF.Ini membakar saya. semoga membantu anda.
funkymushroom

1
Pengingat: JIKA, ADA, LAIN, REM, DEL, dll semua bekerja dalam huruf kecil juga!
Terra Ashley

1
untuk memeriksa apakah file tidak ada, gunakan If Not Exist "%FilePath% ( command ). Perhatikan bahwa, kelelawar menggunakan kawat gigi, (bukan kawat gigi keriting{
transang


10

Berikut adalah contoh yang baik tentang cara melakukan perintah jika file tidak ada atau tidak ada:

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

Kami akan mengambil ketiga file itu dan meletakkannya di tempat sementara. Setelah menghapus folder, itu akan mengembalikan ketiga file tersebut.

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

Gunakan perintah XCOPY :

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

Saya akan menjelaskan apa /c /d /h /e /i /yartinya:

  /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

Panggil file batch lain dengan opsi sync.bat myprogram.ini.

Saya tidak yakin apa yang Anda maksud dengan ini, tetapi jika Anda hanya ingin membuka kedua file ini, Anda cukup meletakkan path file seperti

Path/sync.bat
Path/myprogram.ini

Jika berada di lingkungan Bash itu mudah bagi saya, tapi saya tidak tahu cara menguji apakah ada file atau folder dan apakah itu file atau folder.

Anda menggunakan file batch. Anda sebutkan sebelumnya bahwa Anda harus membuat file .bat untuk menggunakan ini:

Saya harus membuat file .BAT yang melakukan ini:


Apa yang dibunyikan dengan jawaban ini?
Avrumi Sherman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.