How can I test if a list of files exist?

32,443

Solution 1

In cmd.exe, the FOR /F %variable IN ( filename ) DO command should give you what you want. This reads the contents of filename (and they could be more than one filenames) one line at a time, placing the line in %variable (more or less; do a HELP FOR in a command prompt). If no one else supplies a command script, I will attempt.

EDIT: my attempt for a cmd.exe script that does the requested:

@echo off
rem first arg is the file containing filenames
rem second arg is the target directory

FOR /F %%f IN (%1) DO IF EXIST %2\%%f ECHO %%f exists in %2

Note, the script above must be a script; a FOR loop in a .cmd or .bat file, for some strange reason, must have double percent-signs before its variable.

Now, for a script that works with bash|ash|dash|sh|ksh :

filename="${1:-please specify filename containing filenames}"
directory="${2:-please specify directory to check}
for fn in `cat "$filename"`
do
    [ -f "$directory"/"$fn" ] && echo "$fn" exists in "$directory"
done

Solution 2

Bash:

while read f; do 
    [ -f "$f" ] && echo "$f" exists
done < file.txt

Solution 3

for /f %i in (files.txt) do @if exist "%i" (@echo Present: %i) else (@echo Missing: %i)

Solution 4

I wanted to add one small comment to most of the above solutions. They are not actually testing if a particular file exists or not. They are checking to see if the file exists and you have access to it. It's entirely possible for a file to exist in a directory you do not have permission to in which case you won't be able to view the file even though it exists.

Solution 5

In Windows:


type file.txt >NUL 2>NUL
if ERRORLEVEL 1 then echo "file doesn't exist"

(This may not be the best way to do it; it is a way I know of; see also http://blogs.msdn.com/oldnewthing/archive/2008/09/26/8965755.aspx)

In Bash:


if ( test -e file.txt ); then echo "file exists"; fi
Share:
32,443
Joseph
Author by

Joseph

I used to be a computer science student at Rolla, but I escaped mostly unharmed.

Updated on July 29, 2022

Comments

  • Joseph
    Joseph almost 2 years

    I have a file that lists filenames, each on it's own line, and I want to test if each exists in a particular directory. For example, some sample lines of the file might be

    mshta.dll
    foobar.dll
    somethingelse.dll
    

    The directory I'm interested in is X:\Windows\System32\, so I want to see if the following files exist:

    X:\Windows\System32\mshta.dll
    X:\Windows\System32\foobar.dll
    X:\Windows\System32\somethingelse.dll
    

    How can I do this using the Windows command prompt? Also (out of curiosity) how would I do this using bash or another Unix shell?

  • Ishbir
    Ishbir over 15 years
    His file.txt contains filenames, it's not the file he's checking for.
  • Ishbir
    Ishbir over 15 years
    What you say is technically correct; practically, though, it's irrelevant. If I don't have the permissions to read/scan a directory and therefore can't reach a file in it to test its existence, what's the difference to it not existing (for me)?