Batch file 如果存在-批处理脚本以匹配案例

Batch file 如果存在-批处理脚本以匹配案例,batch-file,Batch File,我的要求是,仅当大小写与搜索匹配时,才检查文件夹中是否存在该文件 我在网上搜索过,也是基本的命令提示符帮助指南。我没有准确的答案。但是,在StackOverflow文章中:解决方案是将FileName作为变量发送到批处理文件。但是,我希望通过不使用发送到批处理文件的任何变量来搜索该文件 @echo off dir /b /a-d "%~1"|find "%~1" >nul if %errorlevel% == 0 (echo found) else (echo fail) 这段代码取%

我的要求是,仅当大小写与搜索匹配时,才检查文件夹中是否存在该文件

我在网上搜索过,也是基本的命令提示符帮助指南。我没有准确的答案。但是,在StackOverflow文章中:解决方案是将FileName作为变量发送到批处理文件。但是,我希望通过不使用发送到批处理文件的任何变量来搜索该文件

@echo off 
dir /b /a-d "%~1"|find "%~1" >nul
if %errorlevel% == 0 (echo found) else (echo fail)
这段代码取%1值,我想直接用路径替换%1!请帮助解决这个问题

例如: 文件夹C:\Files中存在名为testfile.txt的文件\ 逻辑应该如下所示:

IF EXIST C:\Files\TESTFILE.txt (
  echo file of case exists
) else (
  echo file of this case does not exist
)

要搜索具有首选案例的文件,请执行以下操作:

@echo off
set "res=" && for /f "delims=" %%i in ('dir "C:\Files" /b /a-d') do if "%%i"=="TESTFILE.txt" set "res=%%i"
if defined res (echo %res% Found) else (echo File not found)
仍在为/f使用
,但未设置变量:

@echo off
for /f "delims=" %%i in ('dir "C:\files" /b /a-d') do if "%%i"=="TESTFILE.txt" echo File found & goto :eof
echo File not found
或者干脆不使用
/f
,但您需要

@echo off
for %%i in (C:\Files\*) do if "%%i"=="TESTFILE.txt" echo File found & goto :eof
echo File not found

下面是使用
FINDSTR
对Gerhard原始答案的更正形式:

dir "C:\files" /b /a-d | findstr /x /c:"TESTFILE.txt" && echo Found || echo Not found
需要使用
/c:“string”
选项来强制进行文字解释(而不是regex),并在名称中允许空格。需要使用
/X
选项强制进行精确匹配。您不希望错误地匹配“the_TESTFILE.txt”

以上可能是最直接的技术

这也可以通过FOR语句来解决。如果
%%F
包含现有文件的名称(不区分大小写),则
%%~nxF
将扩展到磁盘上实际的区分大小写的名称。
但是如果
%%F
不存在,那么
%%~nxF
将永远不会改变这种情况。因此,还必须使用
如果存在

必须仔细构造命令以给出正确的结果。我的目标是拥有一个自包含的构造,它允许在末尾使用
&&
|
,根据文件是否存在有条件地采取操作

pushd C:\files
(
  for %%F in ("TESTFILE.txt") do (
    if exist %%F if %%~F==%%~nxF popd & (call)
  ) && popd
) && echo NOT FOUND || echo FOUND
还是在一条线上

pushd C:\files&(for %%F in ("TESTFILE.txt") do (if exist %%F if %%~F==%%~nxF popd&(call))&&popd) && echo NOT FOUND || echo FOUND

请注意反向逻辑。如果存在具有匹配大小写的文件,则
(call)
是括号内最后执行的命令,导致返回代码非零。如果文件不存在或与大小写不匹配,则
popd
是括号内最后执行的命令,导致返回代码为零。

我还询问了检查TESTFILE.txt的代码。。。代码应该能够识别区分大小写的文件名。确切地我想特别检查某个案例的文件。我该怎么做?不完全是这样-根据文件名,这可能会给出错误的结果。请参见@dbenham ok,我已更改了答案。鉴于
string.ext
string.ext
不能在同一位置,我很想知道原因。更有意义的是确保任何创建的文件都有特定的情况。考虑只有一个文件名为“TESTFILE.txt”的情况,然后代码应该识别文件名与TestFr.txt <代码>不一样,如果存在TestFrase.txt < /C>会找到它,正如<代码> >如果存在TestFrase.txt< /Cord>!因为正如我已经说过的,Windows不允许在同一目录中使用
string.ext
string.ext
。我知道它会识别文本是否在任何情况下。但是,我的要求是检查具体案例的文件是否存在?我知道你要求什么,我的问题是你解释原因,即确切的目的是什么,而不是任务。编写好的代码需要你对整个任务有一个清晰的理解。是的,没错,我会改变我的答案,因为你现在有我的正确版本,没有用我再次添加相同的。