File 检查文件是否存在

File 检查文件是否存在,file,batch-file,command,prompt,File,Batch File,Command,Prompt,我正在寻找写一个脚本,将加载一个文件,其中有一堆CSV格式的目录/文件名,然后输出没有找到的文件 这就是我到目前为止所做的: 对于/f“delims=,tokens=1,2,3”%i in(C:\foo.csv)do dir“Y:\%i\%j\%k”>>C:\temp\log.txt 它输出一切 我真正想要的是,如果找到它,它将不记录任何内容,然后只记录类似于以下内容的单行错误: 未找到文件AC\0d\234csf-234wfv-423vx-23fsdfs.jpg 但现在它记录了一切 如何实现此

我正在寻找写一个脚本,将加载一个文件,其中有一堆CSV格式的目录/文件名,然后输出没有找到的文件

这就是我到目前为止所做的:

对于/f“delims=,tokens=1,2,3”%i in(C:\foo.csv)do dir“Y:\%i\%j\%k”>>C:\temp\log.txt

它输出一切

我真正想要的是,如果找到它,它将不记录任何内容,然后只记录类似于以下内容的单行错误:

未找到文件AC\0d\234csf-234wfv-423vx-23fsdfs.jpg

但现在它记录了一切


如何实现此目的?

请尝试
c:\if/?
并研究显示的帮助,查找是否存在

如果不存在,则必须使用
。您还应该将
delims
放在末尾,以便在逗号之外指定空格作为分隔符

以下是您需要的:

@echo off
for /f "delims=, tokens=1,2,3" %%i in (foo.csv) do (
    if not exist Y:\%%i\%%j\%%k (
        echo Y:\%%i\%%j\%%k doesn't exist >> log.txt
    )
)

您似乎以交互方式使用该命令,因此这里有一个可直接在控制台中使用的解决方案:

for /f "delims=, tokens=1,2,3" %i in (C:\foo.csv) do dir "Y:\%i\%j\%k" >nul 2>nul || echo File "Y:\%i\%j\%k" was not found>> C:\temp\log.txt
更具可读性的多行版本(显然要在批处理脚本中使用,因此是
%%
而不是
%%
):


我试过运行它,它似乎只是将文件中每一行的
do
后的所有内容输出到stdout,并说文件不存在(实际上是不存在的)。还有什么我不知道的地方吗?奇怪,这对我很有用。一个愚蠢的想法,你有没有
echo off
for /f "delims=, tokens=1,2,3" %%i in (C:\foo.csv) do (
dir "Y:\%%i\%%j\%%k" >nul 2>nul || echo File "Y:\%%i\%%j\%%k" was not found>> C:\temp\log.txt
)