检查文件是否存在

时间:2011-02-28 16:57:43

标签: file batch-file command prompt

我正在编写一个脚本,它将加载一个包含CSV格式的目录/文件名的文件,然后输出找不到的文件。

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

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

哪一个输出。

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

File AC\0d\234csf-234wfv-423vx-23fsdfs.jpg was not found

但是现在它记录了所有内容。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

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

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

更易读的多行​​版本(显然用于批处理脚本,因此%%代替%):

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
)

答案 1 :(得分:0)

您必须使用if not exist。您还应该将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
    )
)

答案 2 :(得分:-1)

尝试c:\ if /?并研究显示的帮助,寻找存在。