1

Тема: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Сегодня для меня рухнула картина мироздания!
Ощущаю себя как мальчик увидевший мастурбирующего папу...

Казалось бы, элементарно!
Есть каталог C:\01
Проверяем:

IF EXIST C:\01\*.* (
  ECHO This directory contains files
) ELSE (
  ECHO This directory is empty
)
PAUSE

И эта вот конструкция независимо от наличия там файлов радостно сообщает мне, что таки да, файлы там есть!

А в случае использования IF NOT EXIST с тем же завидным постоянством будет утверждать, что каталог пуст.

В чём проблема?

2

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Попробую объяснить.

* - означает любое количество символов (0 и более). Таким образом C:\01\*.* превращается в C:\01\., что указывает на каталог. А такой каталог у Вас есть. Следовательно условие верно. А вот если бы у Вас не было такого каталога, то действие было бы другое.

( 2 * b ) || ! ( 2 * b )

3

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Спасибо, мироздание пошатнулось, но устояло!
Но как же проверить?..

4

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

вариант 1


dir c:\01 /a-d >nul 2>nul && (
    ECHO This directory contains files
) || (
    ECHO This directory is empty
)

вариант 2


dir c:\01 /a-d >nul 2>nul
if errorlevel 1
    ECHO This directory is empty
) else (
    ECHO This directory contains files
)
( 2 * b ) || ! ( 2 * b )

5

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Ура! Работает...
Правда не пойму, как работает  2>nul ?

6

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

>nul - подавить стандартный вывод
2>nul - подавить вывод ошибок

( 2 * b ) || ! ( 2 * b )

7

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Это я понял, не понял почему именно 2>nul
Что такое - эта двойка в перенаправлении вывода? Возможны ли другие значения?
Извините за дотошность...

8

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Стандартные потоки
Перенаправление в/из стандартных файловых дескрипторов

( 2 * b ) || ! ( 2 * b )

9

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Благодарен безмерно...
Без иронии.
Спасибо!

10

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Вариант 3:


cd /d c:\test
dir /w

for %%i in (*.*) do Goto FLS_EXIST

@Echo --- Folder empty
@Goto The_End

:FLS_EXIST
@Echo --- Files exists...
@Goto The_End

:The_End
@Pause
WBR. Roman

11

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Если ничего подобного не было, то, полагаю, что решение Rumata следует добавить в коллекцию.

Заинтересовал, правда, похожий вопрос: как проверить наличие подкаталогов или  содержимого любого рода - ничего кроме FOR на ум не приходит.

12 (изменено: Rom5, 2013-06-19 12:20:23)

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

wisgest пишет:

как проверить наличие подкаталогов

....
Возможно, что есть смысл поиграться с заменой ключей  "dir c:\01 /a-d ....." на "dir c:\01 /ad /b ...."

WBR. Roman

13

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Rom5 пишет:

Возможно, что есть смысл поиграться с заменой ключей  "dir c:\01 /a-d ....." на "dir c:\01 /ad /b ...."

Уже пробовал - не работает.

14

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Работает. Каталоги pub и incoming - пустые


C:\>dir c:\FTP /s /b
c:\FTP\incoming
c:\FTP\pub
c:\FTP\welcome.txt

C:\>dir c:\FTP\pub /ad /b

C:\>dir c:\FTP\ /ad /b
incoming
pub

C:\>dir c:\FTP\ /a-d /b
welcome.txt

( 2 * b ) || ! ( 2 * b )

15

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

dir /a:d /b "c:\01\*.*" | >nul find.exe /v "" && echo Found || echo Not found

16 (изменено: wisgest, 2013-06-19 13:47:45)

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Rumata пишет:

Работает.

Не устанавливает код ошибки при отсутствии подкаталогов.
_
alexii, это хорошо, но всё-таки используется внешняя команда.

17

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Не устанавливает код ошибки при отсутствии подкаталогов.

То же самое: каталоги «.»,«..» присутствуют.

alexii, это хорошо, но всё-таки используется внешняя команда.

А я не стесняюсь пользовать .

18 (изменено: FlashMan, 2013-11-01 22:29:39)

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Доброго времени суток!
Помогите пожалуйста, вчера до 4 утра сидел, так и не понял в чем проблема...
Создал CMD-шник со следующим фрагментом:

dir C:\1\*.gif /a-d >nul 2>nul && (
    
    ECHO C:\1\*.gif>>%~DPN0.log
    
    i_view32.exe C:\1\*.gif /resize_short=827 /aspectratio /resample /dpi=(100,100) /gray /convert=C:\1\*.gif
    
) || (
    
    ECHO Files not found: C:\1\*.gif>>%~DPN0.log
    
)

Выдает ошибку: "Непредвиденное появление: /gray.". Убираешь /gray начинает на /convert ругаться и т.д. и т.п. Вообщем не в наборе параметров дело. Просто из командной строки этот набор параметров работает.

Пробовал и:

dir C:\1\*.gif /a-d >nul 2>nul

if errorlevel 1 (
    
    ECHO Files not found: C:\1\*.gif>>%~DPN0.log
    
) else (
    
    ECHO C:\1\*.gif>>%~DPN0.log
    i_view32.exe C:\1\*.gif /resize_short=827 /aspectratio /resample /dpi=(100,100) /gray /convert=C:\1\*.gif
    
)

Результат тот же...

Заработало только так:

dir C:\1\*.gif /a-d 2>nul >nul && goto 1
goto end

:1
ECHO C:\1\*.gif>>%~DPN0.log
i_view32.exe C:\1\*.gif /resize_short=827 /aspectratio /resample /dpi=(100,100) /gray /convert=C:\1\*.gif

:end

НО! Во-первых, код с использованием меток не изящный и плохо читаемый, во-вторых, нет возможности в лог поместить информацию о том, что файлы не были найдены, и в-третьих, мне хочется понять, что я неправильно написал в предыдущих двух вариантах.

Помогите, кто знает?!?

19

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

FlashMan, обрамляйте код скриптов тегом "code"!

20 (изменено: FlashMan, 2013-11-01 22:31:00)

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

2 ypppu, спасибо за наводку!

Опишу, если кому-нибудь понадобится.
Правда я не совсем понял, как пользоваться кавычками, но подсказка помогла понять, что ()-скобки - это же операторские скобки, поэтому, если они присутствуют в параметрах, перед ними надо ставить знак ^.
Вот пример моего работающего кода кода:

i_view32.exe %~1\*.gif /resize_short=827 /aspectratio /resample /dpi=^(100,100^) /gray /convert=%~1\*.gif

, т.е. перед каждой скобкой: ^(100,100^)

Всем удачи! Ypppu еще раз спасибо за оперативность, вчера всю ночь на это убил.

21

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

FlashMan, пожалуйста. Но Вы должны отредактировать сообщение #18 и сообщение #20 в этой теме.

22

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Не понял? Как отредактировать?

23

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Рядом с каждым сообщением есть ссылка Изменить.

24

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

Это понятно. А что именно редактировать?

25

Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.

По Правилам форума код скрипта необходимо выделять тегом "code".
Как пользоваться тегами.

FlashMan пишет:

Это понятно. А что именно редактировать?

Редактировать оба сообщения, в которых Вы "забыли" выделить код скрипта.