Verificando se existe uma pasta usando um arquivo .bat [fechado]

160

Eu gostaria de poder verificar se existe uma determinada pasta (Pasta A) e, se houver, para que uma mensagem seja exibida e, em seguida, o arquivo em lotes seja encerrado.

Se a Pasta A não existir, gostaria de verificar se existe outra pasta (Pasta B). Se o FolderB não existir, uma mensagem deve ser exibida e a pasta deve ser criada; se o FolderB existir, uma mensagem deve ser exibida informando isso.

Alguém tem alguma idéia do código que eu poderia simplesmente usar no bloco de notas para criar um arquivo em lotes que me permita fazer isso?

Tudo isso precisa ser feito em um .batarquivo.

user3179825
fonte
7
Uma pesquisa no Google vem com Testando se existe um Drive ou Diretório . E isso explica exatamente como fazer o que você está pedindo ...
NealB
2
Uma pesquisa por "diretório de arquivos em lote existe" aqui no SO encontrado Windows Batch File Procure o diretório, se não existir, crie um arquivo de movimentação , que mostra como ver se um diretório existe ou não. Existem posts aqui sobre a criação de um diretório a partir de um arquivo em lotes. Faça algumas pesquisas básicas antes de postar novas perguntas; as chances são boas, a pergunta já foi feita aqui anteriormente. Obrigado.
White
3
O lote do Windows é uma linguagem de programação, verifique se o arquivo existe é uma tarefa de programação. Aparece no tópico.
Audrius Meskauskas
1
Deve ser fechado como duplicado de Como testar se um arquivo é um diretório em um script em lote? em vez de "off-topic"
Michael Freidgeim 28/09

Respostas:

259

Tente usar isto:

IF EXIST yourfilename (
echo Yes 
) ELSE (
echo No
)

Substitua yourfilename pelo nome do seu arquivo.

Para um diretório, consulte este https://jeffpar.github.io/kbarchive/kb/065/Q65994/

C:
IF NOT EXIST C:\WIN\ GOTO NOWINDIR
CD \WIN
:NOWINDIR

a barra invertida à direita ('\') parece ser suficiente para distinguir entre diretórios e arquivos comuns.

09stephenb
fonte
2
A segunda parte da sua resposta está incompleta.
ATM
4
if exist "c:\folder\nul" echo oknão funcionou para mim no Windows 7. O que funcionou foi if exist "c:\folder\" echo ok.
Alexander Gelbukh
2
@AlexanderGelbukh - Você está correto, if exist "networkPath\nul"pode reportar falsamente um arquivo como uma pasta nas unidades de rede do Windows. Infelizmente, if exist "networkPath\"o mesmo sofre o mesmo problema. Consulte a atualização de 08/12/2015 em stackoverflow.com/a/8669636/1012053 para obter uma técnica que foi confiável em todos os meus testes.
dbenham
@AlexanderGelbukh Funciona sem as aspas. Obviamente, isso limita você quando se trata de ter espaços no caminho do diretório.
Marc.2377
1
Sim, sem aspas, funciona. No entanto, com aspas, ele não funciona mesmo para unidades locais: if exist c:\Windows\nul echo okdiz ok, mas if exist "c:\Windows\nul" echo oknão diz nada. Como eu disse, enquanto if exist "c:\Program Files\nul" echo oknada if exist "c:\Program Files\" echo okdiz , diz oke, portanto, funciona mesmo para caminhos com espaços.
Alexander Gelbukh
34

Eu acho que a resposta está aqui (possivelmente duplicada):

Como testar se um arquivo é um diretório em um script em lotes?

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

Substitua% VAR% pelo seu diretório. Leia a resposta original porque inclui detalhes sobre como lidar com espaços em branco no nome da pasta.

Como o foxidrive disse, isso pode não ser confiável nas janelas da classe NT. Funciona para mim, mas sei que tem algumas limitações (que você pode encontrar na pergunta mencionada)

if exist "c:\folder\" echo folder exists 

deve ser suficiente para janelas modernas.

Cosmin Vană
fonte
6
A técnica \ nul não é confiável nas janelas da classe NT. Foi bom no MSDOS e Win9x no entanto. A solução no Windows moderno é simplesmente if exist "c\:folder\" echo folder exists
foxidrive
1
Eu acho que isso também está especificado no link referenciado.
Cosmin Vană
Ainda não entendi por que recebi votos negativos (o que significa "Não é útil"). Eu adicionei a referência à pergunta em que as respostas cobrem o cenário necessário.
Cosmin Vană
Não útil pode ser porque não é aplicável às máquinas atuais e sua resposta anterior não fez nenhuma distinção. Algumas pessoas ainda recusam sua resposta, porque ela não responde à pergunta como foi colocada.
foxidrive
2
de support.microsoft.com/kb/65994 "NUL sempre existe em uma unidade FAT local do MS-DOS" - como emE:\NUL
bloke CAD