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

Posted

技术标签:

【中文标题】如何验证批处理文件中是不是存在文件?【英文标题】:How to verify if a file exists in a batch file?如何验证批处理文件中是否存在文件? 【发布时间】:2011-03-02 14:51:45 【问题描述】:

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

    如果C:\myprogram\sync\data.handler存在,则退出; 如果C:\myprogram\html\data.sql不存在,则退出; 在C:\myprogram\sync\ 中删除除(testtest3test2)以外的所有文件和文件夹 复制C:\myprogram\html\data.sqlC:\myprogram\sync\ 使用选项sync.bat myprogram.ini调用其他批处理文件。

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

【问题讨论】:

【参考方案1】:

您可以使用 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
)

【讨论】:

如何检查文件名的完整路径?如果路径包含空格,则加分。正如 OP 所说,在 BASH 中很简单。 @Nick:cmd 也很简单 - 请作为不同的问题提出 - 它们不会花费太多。向超过 3 年的问题添加进一步的问题评论不太可能获得很多回复(但请先检查 SO 以获取此精确问题的答案,否则您会将新问题标记为重复...) 只是来自IF /? 帮助文件的一些注意事项:The ELSE clause must occur on the same line as the command after the IF. 这让我很伤心。希望对你有帮助。 提醒:IF、EXIST、ELSE、REM、DEL 等都可以小写! 检查文件是否不存在,使用If Not Exist "%FilePath% ( command )。请注意,bat 使用大括号 ( 而不是花括号 【参考方案2】:

这是一个很好的例子,说明如果文件存在或不存在,如何执行命令:

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 文件:

【讨论】:

【参考方案3】:

输入 IF /?要获得有关 if 的帮助,它清楚地解释了如何使用 IF EXIST。

要删除除某些文件夹外的完整树,请参阅此问题的答案:Windows batch script to delete everything in a folder except one

最后复制只是意味着调用 COPY 并调用另一个 bat 文件可以这样完成:

MYOTHERBATFILE.BAT sync.bat myprogram.ini

【讨论】:

以上是关于如何验证批处理文件中是不是存在文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查批处理文件中是不是存在文件[重复]

如何创建一个批处理文件来检查文件夹中是不是存在四个特定的文件/文件夹?

如何通过批处理文件命令检查 xml 元素/属性是不是存在

批处理文件以检查文件中是不是存在特定单词“test”,如果存在则将整个文件夹复制到另一个位置

检查文件是不是存在后如何删除

如何在启动/调用批处理文件时检查是不是定义了参数?