Вопрос или проблема
Я пытаюсь определить, существует ли файл или папка в консоли 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, можно использовать несколько методов. Эти средства проверки обеспечивают высокую точность и простоту исполнения, избегая необходимости использования батч-скриптов. Рассмотрим основные подходы.
Проверка существования файла:
-
Команда
IF EXIST
:Команда
IF EXIST
подходит для определения наличия как файлов, так и каталогов. Ее синтаксис достаточно прост:IF EXIST "C:\путь\к\файлу.txt" (ECHO Файл существует) ELSE (ECHO Файл не найден)
Эта команда выполнит соответствующее действие в зависимости от того, существует ли указанный файл.
Проверка существования папки:
-
Использование
NUL
:Из-за специфики работы команд Windows, проверка наличия папок может быть выполнена через виртуальный файл
NUL
. Этот способ гарантирует правильную проверку:IF EXIST "C:\путь\к\папке\NUL" (ECHO Папка существует) ELSE (ECHO Папка не найдена)
Данный метод основан на особенностях файловой системы DOS/Windows, где
NUL
представляется в каждом каталоге, позволяя легко определить существование папки. -
Команда
DIR
:Команда
DIR
может быть полезна для вывода содержимого директории и, в случае ее отсутствия, выдаст сообщение об ошибке. Это косвенно указывает на наличие или отсутствие папки:DIR "C:\путь\к\папке" >NUL 2>&1 && ECHO Папка существует || ECHO Папка не найдена
Здесь используется перенаправление
>NUL 2>&1
, чтобы убрать вывод ошибки, сосредоточившись на результате проверки.
Дополнительные подходы:
-
Команда
TYPE
:Этот метод менее традиционен, но позволяет определять наличие файла или папки по реакции системы на попытку их открытия:
TYPE "C:\путь\к\папке" >NUL 2>&1 && ECHO Папка существует || ECHO Папка не найдена
С помощью
TYPE
можно быстро проверить доступность сущности, получая доступность в виде сообщения о разрешении или отсутствии файла.
Эти методы предлагают разнообразные решения для определения существования файлов и папок в Windows, обеспечивая гибкость и надежность выполнения операций. Используйте наиболее подходящий для ваших нужд метод и оптимизируйте свои рабочие процессы с помощью командной строки.