Gostaria de traduzir esse script Linux / Bash para o shell do Windows:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
Ele testa se existe um diretório e, se não existir, ele o cria.
windows-7
command-line
batch-file
Pietro
fonte
fonte
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.Respostas:
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 deif 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.fonte
if exist mydirname\
e o resto, como você diz. Como alternativa, você pode obter umtest
binário e usá-lo no Windows.mkdir
.if not 1==1 echo hmm
ou se existe myDirName \ ELSE blahblahblahAqui 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á.
fonte
if exist dirname
que parece específica do Windows NT.\nul
, não é necessário no Windows NT mais, simplesif 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\nul
nãomyDirName/nul
- 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
fonte
Alguns sugeriram fazer \ nul, mas isso não parece funcionar de maneira confiável no NT
http://www.dostips.com/forum/viewtopic.php?f=3&t=4913
Re questão
fonte
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:
fonte
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á.
fonte
MyDir
após a primeira linha devem ser%MyDir%
. (2) Ocd ..
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 usarpushd
/popd
e / ousetlocal
.também é verdadeiro se myDirName for um arquivo, whis não é a funcionalidade pesquisada
fonte
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:
fonte