Respostas:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Adicionado por Barlop
Enquanto o acima funciona para esta situação específica, o título diz sobre o teste especificamente para um diretório. O comentário de Phogg usando if exist mydirname\ao invés de if exist mydirnameé o caminho. Algumas respostas usaram \ nul, mas \ nul é problemático no NT. Não incluir uma barra invertida à direita testará um arquivo ou um diretório. Portanto, para um diretório, inclua a barra invertida à direita.
if exist mydirname\ e o resto, como você diz. Como alternativa, você pode obter um testbinário e usá-lo no Windows.
mkdir.
if not 1==1 echo hmm ou se existe myDirName \ ELSE blahblahblah
Aqui está o que eu acabei de descobrir:
Você pode testar se existe um arquivo nul; se o diretório existir, ele conterá um arquivo nul; se o arquivo nul não existir, o diretório não existirá.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirnameque parece específica do Windows NT.
\nul, não é necessário no Windows NT mais, simples if exist "C:\Program Files (x86)"deve funcionar (a menos que você ainda está targetting Windows 98 ...)
Use uma barra invertida, não a barra: myDirName\nulnãomyDirName/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 é um diretório
- barra é um arquivo
- xyz não existe
editar: isso só funciona se o nome do diretório não contiver espaços
Alguns sugeriram fazer \ nul, mas isso não parece funcionar de maneira confiável no 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 questão
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>
Gostaria de saber por que Joe teve um voto negativo, pois eu estava enfrentando o mesmo tipo de problema no Windows 7, a saber:
SE EXISTIR nome do arquivo \ NUL
estava retornando VERDADEIRO para arquivos e diretórios. Encontrei uma solução alternativa em www.robvanderwoude.com/battech_ifexistfolder.php e criei uma versão revisada do loop FOR do DVF:
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 ) ) )
Vejo que muitos têm problemas com a diferenciação entre arquivos e pastas. Alguém tentou simplesmente entrar nele depois de verificar se existe? Então o cd terá êxito ou falhará.
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
)
MyDirapós a primeira linha devem ser %MyDir%. (2) O cd ..não fará o que você deseja se %MyDir%for um nome de caminho em vários níveis (por exemplo, Pictures\cats) ou mesmo um nome de caminho absoluto (por exemplo, \Windows). Considere usar pushd/ popde / ou setlocal.
exist myDirName/nul
também é verdadeiro se myDirName for um arquivo, whis não é a funcionalidade pesquisada
C:\blah>touch abe<ENTER>C:\blah>if exist abe\nul echo err<ENTER> C:\blah>if exist abe/nul echo err<ENTER>C:\blah>não sou fã de \ nul no NT, mas não é. Você deveria ter dado alguma saída.
Encontrar uma pasta não deve ser tão difícil. Minha solução, use perl:
for ($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt)
{
if (-d "$ ARGV [$ cnt]") {
print "argv [$ cnt] = $ ARGV [$ cnt] é uma pasta \ n";
$ dir = $ ARGV [$ cnt];
pausa;
} outro {
print "argv [$ cnt] = $ ARGV [$ cnt] não é uma pasta \ n";
}
}
mkdir -p myDirName. Depois de passar dias tentando traduzir scripts bash relativamente simples em batch-sh * t (atribuindo o resultado de uma função a uma variável?), Decidi fazer as pessoas instalarem o cygwin.