Frage

Ich habe eine Datei, die Dateinamen auflistet, die jeweils auf seine eigene Linie, und ich möchte testen, ob jeder in einem bestimmten Verzeichnis vorhanden ist. Zum Beispiel könnten einige Beispiele Zeilen der Datei sein

mshta.dll
foobar.dll
somethingelse.dll

Das Verzeichnis, das mich interessiert ist X:\Windows\System32\, so möchte ich sehen, ob die folgenden Dateien vorhanden sind:

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

Wie kann ich dies tun, die Windows-Eingabeaufforderung? Auch (aus Neugier), wie würde ich tue dies mit bash oder einem anderen Unix-Shell?

War es hilfreich?

Lösung

In cmd.exe, die FOR / F% Variable IN ( Dateiname ) DO Befehl sollten Sie geben, was Sie wollen. Dies liest den Inhalt von Dateinamen eine Zeile zu einem Zeitpunkt (und sie könnten mehr als eine Dateiname sein), die Zeile in% variable Platzierung (mehr oder weniger, tut eine Hilfe für in einer Eingabeaufforderung). Wenn niemand sonst einen Befehlsskript liefert, werde ich versuchen.

EDIT: mein Versuch für einen cmd.exe-Skript, das die angeforderte tut:

@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

Beachten Sie das Skript über muss ein Skript sein; eine FOR-Schleife in einer .cmd oder .bat Datei, aus irgendeinem seltsamen Grund, muss vor seiner variablen Doppel Prozent-Zeichen haben.

Nun, für ein Skript, das mit bash arbeitet | Asche | 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

Andere Tipps

Bash:

while read f; do 
    [ -f "$f" ] && echo "$f" exists
done < file.txt
for /f %i in (files.txt) do @if exist "%i" (@echo Present: %i) else (@echo Missing: %i)

In Windows:


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

(Dies kann nicht der beste Weg, es zu tun, es ist ein Weg, ich weiß von, siehe auch http://blogs.msdn.com/oldnewthing/archive/2008/09/26/8965755.aspx )

In Bash:


if ( test -e file.txt ); then echo "file exists"; fi

Bitte beachten Sie jedoch, dass die Datei standardmäßig unter Verwendung von Systemen unter Win32 und * nichts gibt es keine Möglichkeit, die Unteilbarkeit der Operation zu gewährleisten, das heißt, wenn Sie für die Existenz von Dateien überprüfen A, B und C, einig anderen Prozess oder Thread möglicherweise gelöschte Datei A haben, nachdem Sie es übergeben und während Sie für B und C suchen.

Dateisysteme wie Transactional NTFS kann dies überwinden Einschränkung.

Ich wollte einen kleinen Kommentar zu den meisten der oben genannten Lösungen hinzuzufügen. Sie testen nicht wirklich, ob eine bestimmte Datei vorhanden ist oder nicht. Sie werden zu überprüfen, ob die Datei vorhanden ist, und Sie haben Zugriff darauf. Es ist durchaus möglich, dass eine Datei in einem Verzeichnis existieren Sie die Erlaubnis haben, nicht in diesem Fall werden Sie nicht einmal die Datei anzeigen Lage sein, obwohl es vorhanden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top