如何验证批处理文件中是否存在文件?


185

我必须创建一个.BAT执行此操作的文件:

  1. 如果C:\myprogram\sync\data.handler存在,请退出;
  2. 如果C:\myprogram\html\data.sql不存在,请退出;
  3. C:\myprogram\sync\删除除(testtest3test2)以外的所有文件和文件夹
  4. 复制C:\myprogram\html\data.sqlC:\myprogram\sync\
  5. 使用option调用其他批处理文件sync.bat myprogram.ini

如果它在Bash环境中,这对我来说很容易,但是我不知道如何测试文件或文件夹是否存在以及它是否是文件或文件夹。

Answers:


288

您可以使用IF EXIST检查文件:

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

如果不需要“ else”,则可以执行以下操作:

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
如何使用文件名检查完整路径?如果路径包含空格,则加分。就像OP所说的那样,在BASH中很简单。
尼克,

2
@Nick:也很简单cmd-请问一个不同的问题-它们的价格不高。在超过3年的历史中再添加一个问题评论不太可能获得很多答复(但请先检查SO以获取此精确问题的答案,否则您会将新问题标记为重复...)
Magoo 2014年

8
只是从IF /?帮助文件中要注意的一点: The ELSE clause must occur on the same line as the command after the IF.这让我很伤心。希望对您有帮助。
funkymushroom

1
提醒:IF,EXIST,ELSE,REM,DEL等也都可以小写!
Terra Ashley

1
要检查文件是否不存在,请使用If Not Exist "%FilePath% ( command )。请注意,bat使用(花括号代替花括号{
Transang


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

使用选项sync.bat myprogram.ini调用其他批处理文件。

我不确定您的意思是什么,但是如果您只想打开这两个文件,只需将文件的路径放在

Path/sync.bat
Path/myprogram.ini

如果它在Bash环境中,这对我来说很容易,但是我不知道如何测试文件或文件夹是否存在以及它是否是文件或文件夹。

您正在使用批处理文件。前面提到过,您必须创建一个.bat文件才能使用此文件:

我必须创建一个执行此操作的.BAT文件:


Rung的回答是什么?
Avrumi Sherman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.