Как проверить, является ли файл каталогом в пакетном скрипте?

Ответ Марка Колемана, безусловно, намного лучше, чем выбранный ответ, но если вы хотите избежать глобальной переменной для идентификатора тайм-аута (переменная doit в ответе Марка), вы можете сделать одно из следующего:

(1) Для создания замыкания используйте выражение, вызванное немедленно вызываемым (IIFE).

$(window).resize((function() { // This function is immediately invoked
                               // and returns the closure function.
    var timeoutId;
    return function() {
        clearTimeout(timeoutId);
        timeoutId = setTimeout(function() {
            timeoutId = null; // You could leave this line out.
            // Code to execute on resize goes here.
        }, 100);
    };
})());

(2) Используйте свойство функции обработчика событий.

$(window).resize(function() {
    var thisFunction = arguments.callee;
    clearTimeout(thisFunction.timeoutId);
    thisFunction.timeoutId = setTimeout(function() {
        thisFunction.timeoutId = null; // You could leave this line out.
        // Code to execute on resize goes here.
    }, 100);
});
66
задан Mofi 8 January 2017 в 10:32
поделиться

5 ответов

Можно сделать это как так:

IF EXIST %VAR%\NUL ECHO It's a directory

Однако это только работает на каталоги без пробелов на их имена. Когда Вы добавите кавычки вокруг переменной для обработки пробелов, она прекратит работать. Для обработки каталогов с пробелами преобразуйте имя файла для закорачивания 8,3 форматов следующим образом:

FOR %%i IN (%VAR%) DO IF EXIST %%~si\NUL ECHO It's a directory

Эти %%~si преобразовывает %%i в 8,3 имен файла. Для наблюдения всех других приемов, можно выполнить с FOR, переменные входят HELP FOR в командной строке.

(Примечание - пример, данный выше, находится в формате для работы в пакетном файле. Для получения его работа над командной строкой замените %% % в обоих местах.)

49
ответ дан Kevin Fegan 8 January 2017 в 20:32
поделиться
  • 1
    Это - дежурный пример для установки стиля абзаца в iOS, но я предостерег бы против выпуска tabStops и style, пока приписанная строка, которая использует их, не выпущена. В моем проекте у меня были к propertize все находящиеся в собственности компоненты стиля для удержаний от получения EXC_BAD_ACCESS. – Wienke 31 March 2012 в 04:44

На основе эта статья , названная, "Как пакетный файл может протестировать существование каталога", это "не совсем надежно".

, НО я просто протестировал это:

@echo off
IF EXIST %1\NUL goto print
ECHO not dir
pause
exit
:print
ECHO It's a directory
pause

и это, кажется, работает

1
ответ дан Aaron Thoma 8 January 2017 в 20:32
поделиться

Вот сценарий, который использует ДЛЯ создать полностью определенный путь, и затем pushd, чтобы протестировать, является ли путь каталогом. Заметьте, как это работает на пути с пробелами, а также сетевые пути.

@echo off
if [%1]==[] goto usage

for /f "delims=" %%i in ("%~1") do set MYPATH="%%~fi"
pushd %MYPATH% 2>nul
if errorlevel 1 goto notdir
goto isdir

:notdir
echo not a directory
goto exit

:isdir
popd
echo is a directory
goto exit

:usage
echo Usage:  %0 DIRECTORY_TO_TEST

:exit

Демонстрационный вывод с вышеупомянутым, сохраненным как "isdir.bat":

C:\>isdir c:\Windows\system32
is a directory

C:\>isdir c:\Windows\system32\wow32.dll
not a directory

C:\>isdir c:\notadir
not a directory

C:\>isdir "C:\Documents and Settings"
is a directory

C:\>isdir \
is a directory

C:\>isdir \\ninja\SharedDocs\cpu-z
is a directory

C:\>isdir \\ninja\SharedDocs\cpu-z\cpuz.ini
not a directory
9
ответ дан indiv 8 January 2017 в 20:32
поделиться

Техника NUL, кажется, только работает над 8,3 совместимыми именами файлов.

(Другими словами, 'D:\Documents и Настройки' "плохи" и 'D:\DOCUME~1' "хорош")

<час>

я думаю, что существует некоторая трудность с помощью техники "NUL", когда существуют ПРОБЕЛЫ в имени каталога, такие как "Documents and Settings".

я использую пакет обновления Windows XP 2 и запускаюсь, подсказка cmd от %SystemRoot %\system32\cmd.exe

Вот некоторые примеры того, что DID НЕ работают и что ДЕЙСТВИТЕЛЬНО РАБОТАЕТ на меня:

(Это все демонстрации, сделанные "живой" при интерактивной подсказке. Я полагаю, что необходимо получить вещи работать там прежде, чем попытаться отладить их в сценарии.)

Этот DID НЕ работайте:

D:\Documents and Settings>if exist "D:\Documents and Settings\NUL" echo yes

Этот DID НЕ работайте:

D:\Documents and Settings>if exist D:\Documents and Settings\NUL echo yes

Это ДЕЙСТВИТЕЛЬНО работает (на меня):

D:\Documents and Settings>cd ..

D:\>REM get the short 8.3 name for the file

D:\>dir /x

Volume in drive D has no label. Volume Serial Number is 34BE-F9C9

Directory of D:\
09/25/2008 05:09 PM <DIR> 2008
09/25/2008 05:14 PM <DIR> 200809~1.25 2008.09.25
09/23/2008 03:44 PM <DIR> BOOST_~3 boost_repo_working_copy
09/02/2008 02:13 PM 486,128 CHROME~1.EXE ChromeSetup.exe
02/14/2008 12:32 PM <DIR> cygwin

[[Взгляд прямо здесь!!!!]]
09/25/2008 08:34 AM <DIR> DOCUME~1 Documents and Settings

09/11/2008 01:57 PM 0 EMPTY_~1.TXT empty_testcopy_file.txt
01/21/2008 06:58 PM <DIR> NATION~1 National Instruments Downloads
10/12/2007 11:25 AM <DIR> NVIDIA
05/13/2008 09:42 AM <DIR> Office10
09/19/2008 11:08 AM <DIR> PROGRA~1 Program Files
12/02/1999 02:54 PM 24,576 setx.exe
09/15/2008 11:19 AM <DIR> TEMP
02/14/2008 12:26 PM <DIR> tmp
01/21/2008 07:05 PM <DIR> VXIPNP
09/23/2008 12:15 PM <DIR> WINDOWS
02/21/2008 03:49 PM <DIR> wx28
02/29/2008 01:47 PM <DIR> WXWIDG~2 wxWidgets
3 File(s) 510,704 bytes
20 Dir(s) 238,250,901,504 bytes free

D:\>REM now use the \NUL test with the 8.3 name

D:\>if exist d:\docume~1\NUL echo yes

yes

Это работает, но это - вид глупых, потому что точка уже подразумевает, что я нахожусь в каталоге:

D:\Documents and Settings>if exist .\NUL echo yes

3
ответ дан pestophagous 8 January 2017 в 20:32
поделиться

Это работает:

if exist %1\* echo Directory

Работает с именами каталогов, которые содержат пробелы:

C:\>if exist "c:\Program Files\*" echo Directory
Directory

Обратите внимание, что кавычки необходимы, если каталог содержит пробелы:

C:\>if exist c:\Program Files\* echo Directory

Также можно выразить как:

C:\>SET D="C:\Program Files"
C:\>if exist %D%\* echo Directory
Directory

Это безопасно, дети, попробовать дома!

84
ответ дан 24 November 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: