Как проверить, существует ли каталог в Windows?
Я хочу перевести этот Linux/Bash скрипт в оболочку Windows:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
Он проверяет, существует ли каталог, и если нет, то создает ли он его.
Я хочу перевести этот Linux/Bash скрипт в оболочку Windows:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
Он проверяет, существует ли каталог, и если нет, то создает ли он его.
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Добавлено Barlop
Хотя вышеописанное работает для этой конкретной ситуации, название говорит о тестировании специально для каталога. Комментарий Фогга, использующего if exist mydirname
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
`
Добавлено Barlop
Хотя вышеописанное работает для этой конкретной ситуации, название говорит о тестировании специально для каталога. Комментарий Фогга, использующего , а не if exist mydirname
- это способ. Некоторые ответы используют \nul, но \nul является проблематичным в NT. Не считая трейлингового обратного слеша, можно проверить файл или каталог. Поэтому для каталога включайте трейлинговый обратный слеш.
Вот что я только что узнал:
Можно проверить, существует ли nul-файл; если каталог существует, то он будет содержать nul-файл, если nul-файл не существует, то каталога не существует.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Используйте обратный слеш, а не прямой слэш: myDirName\nul
не myDirName/nul
md foo
echo.>bar
for %I in (foo bar xyz) do @(
if exist %I (
if exist %I\nul (
echo -- %I is a directory
) else (
echo -- %I is a file
)
) else (
echo -- %I does not exist
)
)
– foo - каталог – бар - файл – xyz не существует
edit: это работает только в том случае, если имя каталога не содержит пробелов
Некоторые предлагали сделать \nul, но это, похоже, не работает надежно в NT
C:\blah>md abc
C:\blah>if exist abc\nul echo yes
yes
C:\blah>if exist "abc\nul" echo yes
C:\blah>
http://www.dostips.com/forum/viewtopic.php?f=3&t=4913
foxidrive writes-
The trick with nul worked in pre NT versions of windows.
Now you would use this, with a trailing backslash.
if exist "C:\abcde\" echo the folder exists
Re the question
C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
no
C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
yes
C:\blah>
Мне было интересно, почему у Джо была пониженная оценка, так как я столкнулся с такой же проблемой в Windows 7, а именно с тем, что
IF EXIST filename\NUL
возвращает TRUE для файлов и каталогов. Я нашел альтернативное решение по адресу COPY15_ifexistfolder.php и придумал пересмотренную версию цикла DVF FOR:
FOR %I in (foo bar xyz) DO @( PUSHD %I && (POPD & echo -- %I is a directory) || ( IF exist %I ( echo -- %I is a file ) ELSE ( echo -- %I does not exist ) ) )
```.
Я вижу много проблем с разграничением файлов и папок. Кто-нибудь пытался просто вставить cd в него после проверки его существования? Тогда cd либо удастся, либо нет.
set MyDir = "MyTestDir"
IF exist MyDir (
cd MyDir
IF ERRORLEVEL NEQ 0 (
echo "Error: %MyDir% already exists, but it is a file!"
exit 1
) else (
# Do not forget to cd back
cd ..
)
) else (
# Did not exist yet, so create it.
mkdir MyDir
)
Я предпочитаю использовать dir /d | findstr \[\.\.\]
:
2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName&&echo= Is NOT dir
2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName
For create if exist or not and for ignore error…
2>nul mkDir myDirName
Также …
&00001
Поиск папки не должен быть настолько сложным. Мое решение, используйте perl:
for($cnt=$#ARGV; $cnt\>=0; --$cnt) { if ( -d "$ARGV[$cnt]" ) { print "argv[$cnt]=$ARGV[$cnt] is a folder\n"; $dir = $ARGV[$cnt]; break; } else { print "argv[$cnt]=$ARGV[$cnt] is Not a folder\n"; } }
```.