Làm thế nào để xác minh nếu một tệp tồn tại trong một tệp bó?


185

Tôi phải tạo một .BATtập tin thực hiện điều này:

  1. Nếu C:\myprogram\sync\data.handlertồn tại, thoát;
  2. Nếu C:\myprogram\html\data.sqlkhông tồn tại, thoát;
  3. Trong C:\myprogram\sync\xóa tất cả các file và thư mục trừ ( test, test3test2)
  4. Sao chép C:\myprogram\html\data.sqlvàoC:\myprogram\sync\
  5. Gọi tập tin hàng loạt khác với tùy chọn sync.bat myprogram.ini.

Nếu nó ở trong môi trường Bash thì điều đó thật dễ dàng đối với tôi, nhưng tôi không biết cách kiểm tra xem một tệp hoặc thư mục có tồn tại không và nếu đó là tệp hoặc thư mục.

Câu trả lời:


288

Bạn có thể sử dụng IF EXIST để kiểm tra tệp:

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

Nếu bạn không cần một "người khác", bạn có thể làm một cái gì đó như thế này:

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=

Đây là một ví dụ hoạt động của việc tìm kiếm tệp hoặc thư mục:

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
Làm thế nào để kiểm tra đường dẫn đầy đủ với tên tệp? Điểm thưởng nếu đường dẫn chứa khoảng trắng. Giống như OP đã nói, đơn giản trong BASH.
Nick

2
@Nick: Đơn giản cmdquá - vui lòng hỏi như một câu hỏi khác - chúng không tốn nhiều tiền. Thêm một nhận xét câu hỏi khác cho một người hơn 3 tuổi không có khả năng thu được nhiều câu trả lời (nhưng trước tiên hãy kiểm tra SO để biết câu trả lời cho câu hỏi chính xác này, nếu không bạn sẽ nhận được câu hỏi mới của mình là trùng lặp ...)
Magoo

8
Chỉ cần một cái gì đó để lưu ý từ các IF /?tập tin trợ giúp: The ELSE clause must occur on the same line as the command after the IF.Điều này đốt cháy tôi. hy vọng nó sẽ giúp bạn
funkymushroom

1
Nhắc nhở: IF, EXIST, ELSE, REM, DEL, v.v ... tất cả đều hoạt động bằng chữ thường!
Terra Ashley

1
để kiểm tra nếu tập tin không tồn tại, sử dụng If Not Exist "%FilePath% ( command ). Lưu ý rằng, dơi sử dụng niềng răng (thay vì niềng răng xoăn{
transang

11

Nhập IF /? để được giúp đỡ về nếu, nó giải thích rõ ràng cách sử dụng IF EXIST.

Để xóa một cây hoàn chỉnh trừ một số thư mục, hãy xem câu trả lời của câu hỏi này: Tập lệnh bó Windows để xóa mọi thứ trong một thư mục ngoại trừ một thư mục

Cuối cùng, sao chép chỉ có nghĩa là gọi COPY và gọi một tập tin bat khác có thể được thực hiện như thế này:

MYOTHERBATFILE.BAT sync.bat myprogram.ini

10

Dưới đây là một ví dụ hay về cách thực hiện lệnh nếu một tệp có hoặc không tồn tại:

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

Chúng tôi sẽ lấy ba tập tin đó và đặt nó ở một nơi tạm thời. Sau khi xóa thư mục, nó sẽ khôi phục ba tệp đó.

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

Sử dụng lệnh XCOPY :

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

Tôi sẽ giải thích những gì /c /d /h /e /i /ycó nghĩa là:

  /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

Gọi tệp bó khác với tùy chọn sync.bat myprogram.ini.

Tôi không chắc ý của bạn là gì, nhưng nếu bạn chỉ muốn mở cả hai tệp này, bạn chỉ cần đặt đường dẫn của tệp như thế nào

Path/sync.bat
Path/myprogram.ini

Nếu nó ở trong môi trường Bash thì điều đó thật dễ dàng đối với tôi, nhưng tôi không biết cách kiểm tra xem một tệp hoặc thư mục có tồn tại không và nếu đó là tệp hoặc thư mục.

Bạn đang sử dụng một tập tin hàng loạt. Bạn đã đề cập trước đó, bạn phải tạo tệp .bat để sử dụng tệp này:

Tôi phải tạo một tệp .BAT thực hiện việc này:


Cái gì với câu trả lời này?
Avrumi Sherman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.