Проверьте, существует ли файл/папка, с помощью команды cmd (НЕ пакетный скрипт).

Вопрос или проблема

Я пытаюсь определить, существует ли файл или папка в консоли Windows.

EXIST может использоваться в пакетных файлах, но недоступен в командной строке:

C:\Users\WIN7PR~1>EXIST C:\Users
'EXIST' не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Решение, когда ресурсом является файл, достаточно простое, как указано другими:

C:\> IF EXIST C:\CONFIG.SYS ECHO C:\CONFIG.SYS существует.

К сожалению, вышеуказанное не работает для директорий. Функция EXIST возвращает один и тот же результат для отсутствующих и существующих папок. К счастью, существует неочевидное решение:

C:\> IF NOT EXIST C:\FOLDER\NUL ECHO C:\FOLDER отсутствует.
C:\FOLDER отсутствует.
C:\> MD C:\FOLDER
C:\> IF EXIST C:\FOLDER\NUL ECHO C:\FOLDER существует.
C:\FOLDER существует.

Оказывается, для поддержки конструкций вроде добавления >NUL к командным инструкциям в каждом каталоге существует что-то вроде виртуального файла с именем “NUL”. Проверка его наличия эквивалентна проверке наличия каталога.

Это поведение документировано в статье базы знаний Microsoft ( https://support.microsoft.com/en-us/kb/65994 ), и я подтвердил его на FreeDOS 1.1 и в командной оболочке Windows 7.

ДОПОЛНИТЕЛЬНО: В статье KB указано, что эту технику можно также использовать для проверки наличия диска. Однако при проверке наличия диска существуют оговорки:

  • Ошибка Abort, Retry, Fail? возникает, если диск не форматирован.

  • Использование этой техники для проверки наличия диска зависит от реализации драйвера устройства и может не всегда работать.

Вы можете использовать простую команду

DIR C:\User

Вы можете использовать команду type, она вернет содержимое текстового файла без его открытия, а для директории вернет: Доступ запрещен.

Если файл или директория недоступны, вы получите сообщение: Система не может найти указанный файл.

Например:

C:\>type c:\temp
Доступ запрещен.

C:\>type c:\example.txt
Некоторое примеровое содержимое в текстовом файле

C:\>type c:\doesnotexist
Система не может найти указанный файл.

Просто добавьте if в начало 🙂

if exist C:\Users echo Оно существует!

Вы можете использовать этот код:

<pre>
:init
SETLOCAL enabledelayedexpansion
GOTO make_dir

:make_dir
ECHO .
ECHO Проверка, существует ли директория %out_path% ...
CD %out_path%
IF !ERRORLEVEL! GTR 0 (
   ECHO Директория не существует, создаю...
   MD %out_path%
   GOTO make_dir
) ELSE (
   ECHO Директория уже существует.
)
:GOTO back_it_up

:back_it_up
::Процедура, которая делает резервное копирование
GOTO done

:done
ECHO Завершено
SETLOCAL
EXIT /B
</pre>

Чтобы проверить наличие списка файлов и вернуть таблицу с именами файлов и информацией о том, существуют они или нет (True или False) в одной командной строке, вы можете использовать следующее в командной строке Windows (CMD):
@echo off
echo Путь к файлу ^| Существует
echo ————————— ^| ——-
(for %f in (C:\dir1\prefix*.txt C:\dir2\prefix*.txt C:\dir3\prefix*.txt) do @(
setlocal enabledelayedexpansion
if exist “%f” (
set result=True
) else (
set result=False
)
echo !f! ^| !result!
endlocal
)) > result.txt

Пояснение:

•   for %f in (...): Перебирает список файлов (замените file1.txt, file2.txt, file3.txt на ваши реальные имена файлов).
•   @if exist %f: Проверяет, существует ли текущий файл.
•   echo %f True: Выводит имя файла и True, если файл существует.
•   else (echo %f False): Выводит имя файла и False, если файл не существует.
•   Включите весь цикл в скобки, чтобы убедиться, что он выполняется как одна строка.

Если вы хотите запустить это в пакетном файле, удвойте знаки % до %%f:

(for %%f in (file1.txt file2.txt file3.txt) do @if exist %%f (echo %%f True) else (echo %%f False))

Ответ или решение

Чтобы проверить существование файла или папки с помощью командной строки Windows, можно использовать несколько методов. Эти средства проверки обеспечивают высокую точность и простоту исполнения, избегая необходимости использования батч-скриптов. Рассмотрим основные подходы.

Проверка существования файла:

  1. Команда IF EXIST:

    Команда IF EXIST подходит для определения наличия как файлов, так и каталогов. Ее синтаксис достаточно прост:

    IF EXIST "C:\путь\к\файлу.txt" (ECHO Файл существует) ELSE (ECHO Файл не найден)

    Эта команда выполнит соответствующее действие в зависимости от того, существует ли указанный файл.

Проверка существования папки:

  1. Использование NUL:

    Из-за специфики работы команд Windows, проверка наличия папок может быть выполнена через виртуальный файл NUL. Этот способ гарантирует правильную проверку:

    IF EXIST "C:\путь\к\папке\NUL" (ECHO Папка существует) ELSE (ECHO Папка не найдена)

    Данный метод основан на особенностях файловой системы DOS/Windows, где NUL представляется в каждом каталоге, позволяя легко определить существование папки.

  2. Команда DIR:

    Команда DIR может быть полезна для вывода содержимого директории и, в случае ее отсутствия, выдаст сообщение об ошибке. Это косвенно указывает на наличие или отсутствие папки:

    DIR "C:\путь\к\папке" >NUL 2>&1 && ECHO Папка существует || ECHO Папка не найдена

    Здесь используется перенаправление >NUL 2>&1, чтобы убрать вывод ошибки, сосредоточившись на результате проверки.

Дополнительные подходы:

  1. Команда TYPE:

    Этот метод менее традиционен, но позволяет определять наличие файла или папки по реакции системы на попытку их открытия:

    TYPE "C:\путь\к\папке" >NUL 2>&1 && ECHO Папка существует || ECHO Папка не найдена

    С помощью TYPE можно быстро проверить доступность сущности, получая доступность в виде сообщения о разрешении или отсутствии файла.

Эти методы предлагают разнообразные решения для определения существования файлов и папок в Windows, обеспечивая гибкость и надежность выполнения операций. Используйте наиболее подходящий для ваших нужд метод и оптимизируйте свои рабочие процессы с помощью командной строки.

Оцените материал
Добавить комментарий

Капча загружается...