Проверить наличие файла - PullRequest
       29

Проверить наличие файла

0 голосов
/ 28 февраля 2011

Я хочу написать скрипт, который будет загружать файл с кучей каталогов / имен файлов в формате 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 ]

1 голос
/ 01 марта 2011

Вы, кажется, используете команду в интерактивном режиме, поэтому вот решение, которое будет использоваться непосредственно в консоли:

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
)
0 голосов
/ 28 февраля 2011

Вы должны использовать 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
    )
)
0 голосов
/ 28 февраля 2011

попробуйте c:\ if /? и изучите показанную помощь, ищите, существует.

...